何が起こったのかよく分からない。
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
ファイルを変換することもできます。