スクリプトは期待どおりに実行されません。

スクリプトは期待どおりに実行されません。

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 FILE2つの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.

したがって、lCRなどの通常隠し文字を表示する形式で最初の行を印刷してから、最初の行の後qに終了します。

関連情報