비슷한 질문을 본 적이 있는데 다른 질문을 드립니다.
나는 이것을 읽고 있다http://www.tldp.org/LDP/abs/html/invoking.html나는 다음 내용을 읽었을 때 혼란스러웠습니다.
"권장하지 않음
sh 스크립트 이름
, 이는 스크립트 내의 표준 입력 읽기를 효과적으로 비활성화하기 때문입니다. "
여기에는 두 가지가 있습니다. 첫째, 다음과 같은 스크립트를 실행하려고 합니다.
sh myscript.sh < 파일.txt
표준 입력에서 잘 읽혀집니다.
두 번째는 스크립트 상단에 shebang을 추가하는 방법을 알고 있다는 것입니다.
#!/bin/bash
완전히 같은 의미
배시 myscript.sh
, 그래서 저자가 거기에서 무엇을 지적하고 있는지 이해하지 못합니다. 그냥 혼란스러워요.
작성자가 무슨 뜻인지 이해하는 사람 있나요?
미리 감사드립니다.
답변1
인용문에 오타가 있습니다. 표준 입력을 to 대신 sh <scriptname
에 보내는 "deprecated" 로 시작해야 합니다 .sh
scriptname
답변2
스크립트 상단에 있는 항목은 #!/bin/bash
이름을 직접 입력하여 실행하는 경우에만 작동합니다.
$ ./scriptname
이 방법을 사용하려면 파일 실행 권한도 설정해야 합니다. 실제로 파일을 실행할 때 다음을 수행할 수 있습니다.
- (바이너리)로 작성됩니다.기계어 코드
#!
인터프리터는 규칙 (shebang이라고 함)에 따라 파일에 지정됩니다 .
#!/path/to_the/interpreter
내가 착각하지 않는 한, 그러한 줄을 포함할 수 없는 텍스트 파일(작성된 언어의 구문으로 인해)은 이 방법으로 실행할 수 없습니다.
이러한 파일에 대한 유일한 다른 방법은 파일 이름을 인터프리터에 인수로 전달하는 것입니다. 두 번째 접근 방식의 가장 큰 장점은 파일이 사용자를 위해 실행 가능하지 않고 읽기만 가능해야 한다는 것입니다.
첫 번째 질문의 경우 l0b0이 정확합니다. 잘못 읽었습니다.