cygwinフォルダ​のシェルスクリプト(​.sh)を実行したい​。

MATLABから、cygwinフォルダのシェルスクリプト(.sh)を実行しようと思い、system('パス名\**.sh')を実行すると、シェルスクリプトの編集画面が画面に登場し、実行はできませんでした。原因は、何なんでしょうか?もしお分かりになれば、教えてくださると幸いです。

 Accepted Answer

Kojiro Saito
Kojiro Saito on 24 Feb 2023
Edited: Kojiro Saito on 27 Feb 2023

1 vote

シェルスクリプトの編集画面が表示されたのは、.shファイルのWindowsの既定のプログラムがエディターになっているからではないでしょうか。
以下のようなコードで実行ができると思います。
system('C:\cygwin64\bin\sh C:\cygwin64\home\USERNAME\run.sh');
Cygwinのインストールパスを「C:\cygwin64」、シェルスクリプト(run.sh)があるフォルダーをユーザー「USERNAME」のホームディレクトリの直下にしていますが、適宜変更してみてください。
追記
.shファイルの中で他のshファイルを呼び出す場合には、現在のフォルダーを移動しておき、exprなどのコマンドも使用する場合はCygwinのbinフォルダーを環境変数PATHに追加しておく必要があります。
prevFolder = cd('C:\Users\1000004364\Desktop\230208_MacSim_original\230208_MacSim'); % wlan.shとsim.shのフォルダーに移動
setenv("PATH", getenv("PATH")+";C:\cygwin64\bin\"); % CygwinのbinフォルダーをPATHに追加
system('sh wlan.sh');
cd(prevFolder) % 以前のフォルダーに戻る

5 Comments

Tomoyuki Yamada
Tomoyuki Yamada on 27 Feb 2023
回答、ありがとうございます。確かに、編集画面は出ずに、コードは実行できました。
しかし、エラーメッセージが出てしまいます。
シェルスクリプト(run.sh)があるフォルダーでの実行では、エラーメッセージが出ずに実行完了できるのですが。。。
とりあえず、一歩前進です。
Kojiro Saito
Kojiro Saito on 27 Feb 2023
どのようなエラーメッセージが出ていますか?
よくわからないエラーメッセージが出ます。
>> system('C:\cygwin64\bin\sh C:\Users\1000004364\Desktop\230208_MacSim_original\230208_MacSim\wlan.sh')
C:\Users\1000004364\Desktop\230208_MacSim_original\230208_MacSim\wlan.sh: line 74: ./sim: No such file or directory
C:\Users\1000004364\Desktop\230208_MacSim_original\230208_MacSim\wlan.sh: line 82: expr: command not found
C:\Users\1000004364\Desktop\230208_MacSim_original\230208_MacSim\wlan.sh: line 71: [: -le: unary operator expected
ans =
127
お分かりになるでしょうか?
Kojiro Saito
Kojiro Saito on 27 Feb 2023
Edited: Kojiro Saito on 27 Feb 2023
エラーが2種類出ています。
./sim: No such file or directory」はwlan.shと同じフォルダーにあるsim.shを見つけられていないためで、「expr: command not found」と「[: -le: unary operator expected」はCygwinのbinフォルダーにあるexpr.exe[.exeが環境変数のPATHに入っていないためです。
以下のようにMATLABコードを変更すればエラーなく実行できるようになります。
prevFolder = cd('C:\Users\1000004364\Desktop\230208_MacSim_original\230208_MacSim'); % wlan.shとsim.shのフォルダーに移動
setenv("PATH", getenv("PATH")+";C:\cygwin64\bin\"); % CygwinのbinフォルダーをPATHに追加
system('sh wlan.sh');
cd(prevFolder) % 以前のフォルダーに戻る
回答にも追記しておきました。
Tomoyuki Yamada
Tomoyuki Yamada on 27 Feb 2023
回答、ありがとうございます。
成功しました。
本当に助かりました。

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!