![“`_`、`-`、`--` 或空字符串用于 shell 的错误消息”是什么意思?](https://linux22.com/image/134851/%E2%80%9C%60_%60%E3%80%81%60-%60%E3%80%81%60--%60%20%E6%88%96%E7%A9%BA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%94%A8%E4%BA%8E%20shell%20%E7%9A%84%E9%94%99%E8%AF%AF%E6%B6%88%E6%81%AF%E2%80%9D%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
从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