bash / zshスクリプトは、bashまたはzshの両方でFreeBsdの端末から呼び出されません。

bash / zshスクリプトは、bashまたはzshの両方でFreeBsdの端末から呼び出されません。

FreeBsd 11にスクリプトがあります

% cat my_script.sh 
#!/usr/local/bin/zsh

# [........]

これには次の属性がありますx

-rwxr-xr--   1 root  wheel  669 Jun 14 02:45 my_script.sh

私のシェルはですzsh。実行しようとするとエラーが発生します。これは私が呼ぶ方法に関連しています。

% sudo ./my_script.sh var1                  
sudo: ./my_script.sh: command not found


% sudo my_script.sh var1 
sudo: my_script.sh: command not found


% sudo source my_script.sh var1
sudo: source: command not found

何が問題なの?

修正する:

シェルをbashに変更し、再起動し、#!bashに変更し、次のような結果を得ました。

$ sudo ./my_script.sh test9
sudo: ./my_script.sh: command not found

答え1

% sudo ./my_script.sh var1                  
sudo: ./my_script.sh: command not found

このメッセージは、ファイルが./my_script.sh存在しないことを示します。対応するローダーが存在しません。。スクリプトの場合、ローダーは次の実行可能ファイルです。シェルボーンライン

/usr/local/bin/zsh存在するか、壊れたシンボリックリンクではないことを確認してください。

ファイルに実際に#!/usr/local/bin/zsh最初の行が含まれており、#!/usr/local/bin/zsh中間の後ろまたは途中にスペースやその他の見えない文字が含まれていないことを確認してください。特別な注意が払われます入力する物を破壊する目に見えないキャラクターの一つです。 Windowsでスクリプトを作成(または編集)すると、CRが発生します。 Windowsでスクリプトを編集する場合は、行末を「LF」、「Unix」、「Linux」、または任意の名前に設定して保存する必要があります。編集者のため。

% sudo my_script.sh var1 
sudo: my_script.sh: command not found

これがうまくいかない理由は簡単ですmyscript.shコマンド検索パス

% sudo source my_script.sh var1
sudo: source: command not found

これがうまくいかない理由は簡単です。source組み込みシェルなので実行ファイルではありません。 (実行ファイルになるのは、その目的が一部のシェルコードを実行することだから意味がありません。現在のシェルから--シェルだけがこれを行うことができます。 )

現在実行中のシェルは、これら3つのコマンドとは何の関係もありません。

答え2

問題は、sudo現在のディレクトリもPATH

したがって、スクリプトが見つかるようにフルパスを指定します。

sudo /path/to/my_script.sh

また、ファイルではなくシェルが組み込まれているsudo sourceため、同じエラーが発生します。sourceシェルを使用する代わりに、ファイルを必要とするsudo実行引数を使用してください。execev

詳しくはman sudo(特にプロセスモデル小計- 金利そして-Sオプション)、設定オプションについて、およびman sudoersを参照してください/etc/sudoers

指定されたスクリプトパスを使用する追加のオプションについては、sudo次を参照してください。https://stackoverflow.com/questions/12996397/command-not-found-when-using-sudo

関連情報