シェルスクリプトは実行されません

シェルスクリプトは実行されません

何が起こったのかよく分からない。

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

答え1

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

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

答え2

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

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

、を使用して./現在のディレクトリを表すと、シェルはスクリプトの場所を知ることができます。

答え3

./scriptname他の質問に投稿したように、時々別の投稿に投稿したようにスクリプトを実行しても。回答、コンピュータでテストできます。

テスト

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ファイルを変換することもできます。

関連情報