파일을 매개변수로 사용하고 각 파일에 대한 일련의 지침을 실행하는 스크립트가 있습니다. 파이프로 연결하려면 어떻게 작성해야 합니까 find
? 아래 예에서는 find
이런 방식으로 사용하지 않습니다. 나는 그 출력이 동일한 구조를 가지고 있다고 가정합니다 printf "%s\n..."
. (아니요?)
my-script.sh
:
# !/bin/bash
help()
{
echo "help"
echo
}
while [[ $# -gt 0 ]]
do
case $1 in
*)
echo "$1"
shift # past argument
;;
esac
done
아름다운:
$ cat foo; echo; cat bar
foo
bar
$ ./my-script.sh foo bar
foo
bar
하지만:
$ printf "%s\n%s\n" "./foo" "./bar" | xargs -n 1 ./my-script.sh
./my-script.sh: 9: ./my-script.sh: [[: not found
./my-script.sh: 9: ./my-script.sh: [[: not found
답변1
너의 셔뱅
# !/bin/bash
아무 효과가 없습니다(그냥 주석처럼 보입니다). 공백허가 후#!
, 그러나 #
와 사이에는 없습니다 !
.
따라서 실행되는 스크립트는 확장된 테스트 구문(원래 에서 )을 지원하지 않는 에 의해 해석 xargs
됩니다 ./bin/sh
[[ ... ]]
ksh
를 통하지 않고 대화형 셸에서 직접 스크립트를 실행하면 xargs
bash 하위 셸에서 해석될 가능성이 높습니다. 바라보다Shebang 없이 스크립트를 실행하는 쉘 인터프리터는 무엇입니까?