스크립트가 예상대로 실행되지 않습니다.

스크립트가 예상대로 실행되지 않습니다.

Unix의 미리 정의된 위치에 두 개의 Perl 스크립트가 있습니다. 이 사전 정의된 위치는 경로 변수( )에 설정됩니다 $PATH. 이제 모든 위치에서 첫 번째 스크립트를 실행하려고 하면 스크립트가 성공적으로 실행되지만 두 번째 스크립트(이전 스크립트와 동일한 경로)에서는 오류가 발생합니다.

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첫 번째 줄 다음에 종료합니다.

관련 정보