
Unixの事前定義された場所に2つのPerlスクリプトがあります。この事前定義された位置はパス変数()に設定されます$PATH
。すべての場所で最初のスクリプトを実行しようとすると、スクリプトは正常に実行されますが、2番目のスクリプト(以前のスクリプトと同じパス)ではエラーが発生します。
ScriptB: Command not found
私のシェルはtcshで、両方のスクリプトに付与された権限は同じです。
この誤った動作の考えられる理由は何ですか?
答え1
ScriptB には CRLF 行末があります。カーネルはCRLFをサポートしていないため、名前付きプログラム"/path/to/bin/perl\r"
(CRを意味します)を実行しようとします。\r
プログラムが存在しません。 ScriptB を LF 行末に変換します。 (ありがとうスティーブン・チャジェラス~のため尋ねる正しい質問です。出力に問題があることが\r
表示されます。sed
)
sed l\;q FILE
2つのsedコマンドを実行します(セミコロンで区切られており、このコマンドもシェルメタ文字であるため、エスケープする必要があります)。からman sed
:
l List out the current line in a "visually unambiguous" form
q Immediately quit the sed script without processing any more input,
except that if auto-print is not disabled the current pattern space will be printed.
したがって、l
CRなどの通常隠し文字を表示する形式で最初の行を印刷してから、最初の行の後q
に終了します。