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