파이프를 통해 찾을 수 있도록 스크립트를 어떻게 작성합니까?

파이프를 통해 찾을 수 있도록 스크립트를 어떻게 작성합니까?

파일을 매개변수로 사용하고 각 파일에 대한 일련의 지침을 실행하는 스크립트가 있습니다. 파이프로 연결하려면 어떻게 작성해야 합니까 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

를 통하지 않고 대화형 셸에서 직접 스크립트를 실행하면 xargsbash 하위 셸에서 해석될 가능성이 높습니다. 바라보다Shebang 없이 스크립트를 실행하는 쉘 인터프리터는 무엇입니까?

관련 정보