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