리디렉션은 소스 스크립트에 대한 인수로 표시되지 않습니다.

리디렉션은 소스 스크립트에 대한 인수로 표시되지 않습니다.

내 문제는 bash 스크립트를 작성할 때 화면에 인쇄할 수 없다는 것입니다.

. myBashScript.sh < text.txt

그냥 myBashScript.sh인쇄해서 써요

echo $2

그러나 "text.txt"를 인쇄하는 대신 "newLine"이 표시됩니다. 내가 아는 한, "<"는 새로운 줄입니다.

$2안 돼 text.txt?

답변1

실제로 입력하고 있다고 가정합니다.

./myBashScript.sh < text.txt

슬래시를 사용합니다.

이를 실행하면 ./myBashScript.sh < text.txt대화형 셸이 실제로 < text.txt이를 캡처하고 특수 명령으로 해석합니다. 특히 명령줄을 해석하여 text.txt .sh에 연결된 표준 입력을 사용하여 myBashScript를 실행해야 한다는 의미로 해석합니다. 그러면 < text.txt명령줄에서 셸이 제거되고 제어권이 myBashScript.sh로 전달됩니다. 따라서 쉘 스크립트에 관한 한 인수는 0개이고 $2비어 있습니다. 귀하의 스크립트는 단순히 다음과 같이 번역됩니다.

echo

개행 문자를 인쇄합니다.

실제로 파일 이름을 인쇄하려면 다음을 고려해야 합니다.

#!/bin/sh
echo $1

그런 다음 다음을 실행할 수 있습니다.

$ ./myShellScript text.txt
text.txt

반면, 파일 내용을 인쇄하려면 cat(1)을 사용해야 합니다. 쉘 스크립트는 다음과 같습니다.

#!/bin/sh
cat $1

그런 다음 다음을 실행할 수 있습니다.

$ ./myShellScript text.txt
Hello from text.txt, a file containing a bunch of test strings.

관련 정보