从https://unix.stackexchange.com/a/156010/674
请注意,上面的第二个
sh
进入内联脚本的$0
.您应该在那里使用相关的内容(例如sh
或find-sh
),而不是像_
、-
或--
空字符串这样的内容,因为它们用于 shell 的错误消息:$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \; inline-sh: ./accept_ra: Permission denied
_
“ 、-
、--
或空字符串用于 shell 的错误消息”是什么意思?
既然不是、或空字符串,为什么usinginline-sh
在示例中不起作用?inline-sh
_
-
--
谢谢。
答案1
“用于 shell 的错误消息”的主题是“ $0
”,而不是“ _
、-
或--
空字符串”。给定的值$0
用于错误消息;所以你不应该为 指定一个无意义的值$0
,否则你最终会得到奇怪的错误消息。这可能更有意义
请注意,上面的第二个
sh
进入内联脚本的$0
.您应该在那里使用相关的内容(例如sh
或find-sh
),而不是像_
,-
或--
空字符串这样的内容,因为 in 中的值$0
用于 shell 的错误消息:
inline-sh
做在示例中工作:它在错误消息中使用,这是该示例的重点。
答案2
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \;
inline-sh: ./accept_ra: Permission denied
错误消息告诉您inline-sh
无法打开./accept_ra
文件。
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' _ {} \;
_: ./accept_ra: Permission denied
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' '' {} \;
: ./accept_ra: Permission denied
使用户不太明显并且更困惑到底是什么无法打开该文件./accept_ra
。
因此,建议为 后的第一个参数使用有意义的值sh -c 'code'
。重复命令名称通常就可以了。如在
sh -c 'code using "$@"' sh actual arguments to the inline script