如何编写一个脚本以便我可以通过管道找到它?

如何编写一个脚本以便我可以通过管道找到它?

我有一个脚本需要文件作为参数,并为每个文件执行一组指令。我应该如何编写它才能将其通过管道传输到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)。

当您直接从交互式 shell 而不是 via 运行脚本时xargs,它很可能由 bash 子 shell 解释。看哪个 shell 解释器运行不带 shebang 的脚本?

相关内容