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