web-dev-qa-db-ja.com

シェルスクリプトが実行されていない

何が起こっているのかわかりません。

スクリプトを呼び出しましょうa.sh以下を使用

/users/guru$ cat a.sh
#! /usr/bin/ksh

echo "Hello"
date

kshで実行します。それが行われます。

/users/guru$ ksh a.sh
Hello
Tue Jul 15 15:00:52 EDT 2014

ファイルの権限とkshパスを確認してください。

/users/guru$ ls -l a.sh
-rwxrwxrwx    1 guru  kpc         35 Jul 15 15:00 a.sh
/users/guru$ a.sh
ksh: a.sh:  not found
/users/guru$ which ksh
/usr/bin/ksh
4
Guru

「./a.sh」を実行してみてください。ファイルがどこにあるかを知る必要があります。

「./」は、現在のディレクトリを検索するように指示します。

8
Tango Bravo

コマンドを入力すると、シェルはPATH変数で指定されたディレクトリのリストからコマンドを検索します。

現在のディレクトリは(セキュリティ上の理由から)デフォルトではPATHにないため、シェルはスクリプトを見つけることができません。

現在のディレクトリを意味する./を使用して、シェルがスクリプトの場所を認識できるようにします。

4
cuonglm

他の質問で投稿したように、スクリプトを./scriptnameとして実行しても、ファイルが見つからないというエラーが発生する場合があります。私が他の answer に投稿したように、あなたのマシンでそれをテストすることができます。

テスト

cat ksh_experiment.ksh

#!/usr/bin/ksh
echo "Hello"

これで、ファイルを実行したときに権限を提供した後、出力が正常に生成されました。 ここ で説明したように、ファイルに改行を挿入しました。スクリプトを実行すると、次のような出力が得られました。

ksh: ./ksh_experiment.ksh: not found [No such file or directory]

現在、cat -v ksh_experiment.kshも同じ出力を生成しました。また、vim ksh_experiment.kshと入力すると、新しいファイルが開かれていました。

私が提供したリンクの回答で説明したように、コマンドを使用してキャリッジリターンを削除しました。

 Perl -p -i -e "s/\r//g" ksh_experiment.ksh

実行時に修正した後、期待どおりの出力が得られました。

これで、dos2unixを使用してファイルを変換することができます。

1
Ramesh