쉘 스크립트 실행의 다양한 형태

쉘 스크립트 실행의 다양한 형태

비슷한 질문을 본 적이 있는데 다른 질문을 드립니다.

나는 이것을 읽고 있다http://www.tldp.org/LDP/abs/html/invoking.html나는 다음 내용을 읽었을 때 혼란스러웠습니다.

"권장하지 않음

sh 스크립트 이름

, 이는 스크립트 내의 표준 입력 읽기를 효과적으로 비활성화하기 때문입니다. "

여기에는 두 가지가 있습니다. 첫째, 다음과 같은 스크립트를 실행하려고 합니다.

sh myscript.sh < 파일.txt

표준 입력에서 잘 읽혀집니다.

두 번째는 스크립트 상단에 shebang을 추가하는 방법을 알고 있다는 것입니다.

#!/bin/bash

완전히 같은 의미

배시 myscript.sh

, 그래서 저자가 거기에서 무엇을 지적하고 있는지 이해하지 못합니다. 그냥 혼란스러워요.

작성자가 무슨 뜻인지 이해하는 사람 있나요?

미리 감사드립니다.

답변1

인용문에 오타가 있습니다. 표준 입력을 to 대신 sh <scriptname에 보내는 "deprecated" 로 시작해야 합니다 .shscriptname

답변2

스크립트 상단에 있는 항목은 #!/bin/bash이름을 직접 입력하여 실행하는 경우에만 작동합니다.

$ ./scriptname

이 방법을 사용하려면 파일 실행 권한도 설정해야 합니다. 실제로 파일을 실행할 때 다음을 수행할 수 있습니다.

  • (바이너리)로 작성됩니다.기계어 코드
  • #!인터프리터는 규칙 (shebang이라고 함)에 따라 파일에 지정됩니다 .
#!/path/to_the/interpreter

내가 착각하지 않는 한, 그러한 줄을 포함할 수 없는 텍스트 파일(작성된 언어의 구문으로 인해)은 이 방법으로 실행할 수 없습니다.
이러한 파일에 대한 유일한 다른 방법은 파일 이름을 인터프리터에 인수로 전달하는 것입니다. 두 번째 접근 방식의 가장 큰 장점은 파일이 사용자를 위해 실행 가능하지 않고 읽기만 가능해야 한다는 것입니다.

첫 번째 질문의 경우 l0b0이 정확합니다. 잘못 읽었습니다.

관련 정보