Debianのコマンドラインからbash scriptname.sh
を使用してスクリプトを実行するたびに、Command Not found
を取得してから、スクリプトの結果を取得します。
スクリプトは機能しますが、空行ごとに常にCommand Not Found
ステートメントが画面に出力されます。各空白行はコマンドが見つからないという結果になります。
/var
フォルダーからスクリプトを実行しています。
スクリプトは次のとおりです。
#!/bin/bash
echo Hello World
次を入力して実行します。
bash testscript.sh
なぜこれが起こるのですか?
最初の行が以下であることを確認してください。
#!/bin/bash
/bin/bash
でない場合は、bashへのパスを入力してください
実行してみてください:
dos2unix script.sh
行末などをWindowsからUNIX形式に変換します。つまり、行末から\ r(CR)を取り除き、それらを\r\n (CR+LF)
から\n (LF)
に変更します。
ファイルがdos/Win形式であるかどうかを確認する別の方法:
cat scriptname.sh | sed 's/\r/<CR>/'
出力は次のようになります。
#!/bin/sh<CR>
<CR>
echo Hello World<CR>
<CR>
これにより、ファイル内の<CR>
文字ごとに\r
が表示されたファイルテキスト全体が出力されます。
bash -x scriptname.sh
を使用してトレースできます。
私も同様の問題に遭遇しました。問題は許可のようです。 ls -l
を実行すると、ファイルの実行ビットがオンになっていない可能性があることを識別できる場合があります。これは、スクリプトの実行を許可しません。 :)
@artooroがコメントに追加したように:
この問題を修正するには、
chmod +x testscript.sh
を実行します
スクリプトが(比較的)うまく機能している場合は、正常に実行されています。問題は、おそらく、パス上にない、インストールされていない、つづりが間違っている、または類似したプログラムを参照するファイル内の1行です。
1つの方法は、スクリプトの先頭にset -x
を配置するか、単にbash
の代わりにbash -x
で実行することです。これにより、実行前に行が出力されます。問題
あなたが言うように、それが問題を引き起こしている空行であるなら、あなたは実際に何をチェックしたいかもしれませんinそれら。実行:
od -xcb testscript.sh
また、Windowsタイプのエディタを使用して取得できるCTRL-M
(キャリッジリターン)のような「見えない」変な文字がないことを確認してください。
スクリプトファイルでdos2unix
を使用します。
これは些細なことであり、OPの質問とは関係ありませんが、スクリプト作成を学習していたときに、最初はよく間違えていました。
VAR_NAME = $(hostname)
echo "the hostname is ${VAR_NAME}"
これにより、「コマンドが見つかりません」という応答が生成されます。正しい方法は、スペースを削除することです
VAR_NAME=$(hostname)
Notepad ++があり、この.shエラーメッセージが表示される場合:"command not found"またはこのautoconfエラーメッセージ "line 615:../../autoconf/bin/autom4te:そのようなファイルやディレクトリはありません」。
Notepad ++で編集-> EOL変換に移動してからMacinthos(CR)をチェックします。これにより、ファイルが編集されます。また、すぐにこのようなエラーが発生するため、このコマンドですべてのファイルを確認することをお勧めします。
実行するためには、たとえばその完全なパスを提供する必要があります
/home/Manuel/mywrittenscript
chmod u+x testscript.sh
を試してください
私はここからそれを知っています: http://www.linuxquestions.org/questions/red-hat-31/running-Shell-script-command-not-found-202062/
Bash for Windowsでは、間違って実行しようとしました
run_me.sh
先頭に./がなく、同じエラーが発生しました。
Windowsのバックグラウンドを持つ人々にとって、正しいフォームは冗長に見えます:
./run_me.sh
同じ問題がありました。あいにく
dos2unix winfile.sh
bash: dos2unix: command not found
変換するためにこれを行いました。
awk '{ sub("\r$", ""); print }' winfile.sh > unixfile.sh
その後
bash unixfile.sh
スクリプトの実行に関する問題は、複数行コマンドの不適切な書式設定にも関連している場合があります。たとえば、改行「\」の後に空白文字がある場合です。例えば。この:
./run_me.sh \
--with-some parameter
(「\」の後に余分なスペースがあることに注意してください)、問題が発生しますが、そのスペースを削除すると、完全に正常に実行されます。
今日私はこれに出くわして、ぼんやりとドルコマンドプロンプト$
(コマンド文字列の前)をスクリプトにコピーしました。
Cannot execute command
の一部も持っていました。すべてが正しいように見えましたが、実際には、コマンドの直前に壊れないスペース
がありました。
if [[ "true" ]]; then
highlight --syntax js "var i = 0;"
fi
Vimでは、次のようになりました。
if [[ "true" ]]; then
highlight --syntax js "var i = 0;"
fi
Bashスクリプトチェッカーshellcheck
を実行して初めて問題が見つかりました。
現在のディレクトリ(。)をPATHに追加して、名前を入力するだけで、現在のディレクトリにあるスクリプトを実行できるようにします。
PATH=.:$PATH
入力するコマンドを認識するために、エイリアスを使用して.bashrcファイルと.bash_profileファイルを更新することができます。
.bashrcおよび.bash_profileファイルは、おそらくプログラムファイルを保存するC:ドライブにある隠しファイルです。