“`_`、`-`、`--` 或空字符串用于 shell 的错误消息”是什么意思?

“`_`、`-`、`--` 或空字符串用于 shell 的错误消息”是什么意思?

https://unix.stackexchange.com/a/156010/674

请注意,上面的第二个sh进入内联脚本的$0.您应该在那里使用相关的内容(例如shfind-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.您应该在那里使用相关的内容(例如shfind-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

相关内容