다음 스크립트가 있습니다
#!/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