パイプを通して見つけることができるようにスクリプトを作成するにはどうすればよいですか?

パイプを通して見つけることができるようにスクリプトを作成するにはどうすればよいですか?

ファイルをパラメータとして使用し、各ファイルに対して一連の指示を実行するスクリプトがあります。パイプで接続するにはどうすればよいですか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なしでスクリプトを実行するシェルインタプリタとは何ですか?

おすすめ記事