我有一个脚本,它需要文件作为参数,并为每个文件执行一组指令。我应该如何编写它才能将其通过管道传输到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
你的shebang
无效(它只是看起来像一个评论)。在 之后允许空格,但在和之间不允许
#!
空格。#
!
因此,运行通过的脚本
xargs
被/bin/sh
- 解释,它不支持[[ ... ]]
扩展测试语法(最初来自ksh
)。当您直接从交互式 shell 而不是 via 运行脚本时
xargs
,它可能会被 bash 子 shell 解释。请参阅哪个 shell 解释器运行没有 shebang 的脚本?