다음 스크립트가 있습니다
#!/bin/bash
file="$1"
cat $file
n=$(cat $file | wc -l)
cat $file
cat some_file.txt | myScript.sh
나는 첫 번째는 cat
파일의 내용을 출력하고 두 번째는 그렇지 않은 것처럼 사용합니다 . 파이프 뒤에 있는 변수의 내용을 어떻게 보존할 수 있나요?
답변1
이것은 당신이 생각하는 일을 하고 있지 않습니다. 이는 $1
스크립트에 전달하는 첫 번째 매개변수이지만 실제로는 아무것도 전달하지 않습니다. 이는 cat $file
실제로 cat
혼자가 된다는 것을 의미한다. 인수가 주어지지 않으면 cat
입력 내용만 인쇄됩니다.
$ echo "foo" | cat
foo
따라서 첫 번째는 cat
입력 내용, 즉 파일 내용을 인쇄합니다. 두 번째는 첫 번째가 모든 것을 가져왔기 때문에 입력이 없으므로 아무 작업도 수행하지 않습니다. 당신이하고 싶은 일은 다음과 같습니다 :
myscript.sh file
그러면 파일의 내용이 두 번 인쇄되고 출력도 cat $file |wc
변수에 저장됩니다 n
.
원하는 것이 파일 내용을 에 저장하는 것이라면 $file
다음을 시도하십시오.
file="$(cat < "$1")"
그리고 파일 이름을 인수로 사용하여 스크립트를 실행합니다.
script.sh file