当使用 cat 找不到参数时,Bash 打印帮助消息
Posted
技术标签:
【中文标题】当使用 cat 找不到参数时,Bash 打印帮助消息【英文标题】:Bash printing a help message when no arguments are found using cat 【发布时间】:2019-07-03 06:00:49 【问题描述】:我还应该做的是,如果没有参数,我应该使用 cat 向标准错误设备打印“帮助”消息。到目前为止,我可以理解并使用 echo 让它工作,但我的任务是只使用 cat 来做到这一点。当我尝试cat 2> (help message)
行时,它会转到一个新行,我可以在其中输入任何内容并导致脚本根本无法正常工作,唯一的转义是ctrl + z
。如何使用 cat 而不是 echo 来做到这一点?如果仅使用 cat 可能的话,stderr 消息仍然会被打印出来?
帮助消息
Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----.
代码
#!/bin/bash
# concat script
if [[ $@ ]]
then
for i in "$@"
do
cat "$i" && echo "-----"
done
exit 0
else
cat 2> "Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----."
exit 1
fi
【问题讨论】:
Check number of arguments passed to a Bash script的可能重复 不是重复的,我希望只使用 cat 而不是 echo。我也没有收到该帖子中的任何错误消息 这就是为什么我说这是一个可能重复。 :) 我认为你应该做的是检查参数的数量。如果它小于 1(或 2),则显示帮助消息,否则,运行您的核心程序逻辑。你根本不需要cat
或echo
。 :)
参数的数量已经被检查过了。当没有参数并且我正在使用echo
时,它会正确显示应有的帮助消息。不过,我的任务是使用 cat 来“将以下帮助消息打印到标准错误设备”。这就是我的问题所在。
你可以把for ... do ... done
循环写得更短(没有循环):cat "$@" && echo "-----"
【参考方案1】:
cat
用于从文件中输出数据。要从字符串输出数据,请使用echo
。
2>
用于将标准输出重定向到文件。要将 stdout 指向 stderr,请使用 >&2
。
总之:
echo >&2 "Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----."
如果你真的想避免使用正确的工具来完成这项工作,你可以根据这里的文档重写它(创建一个 cat 可以读取的临时文件):
cat << EOF >&2
Usage: concat FILE ...
Description: concatenates FILE(s) to standard output separating them with divider -----.
EOF
【讨论】:
工作得很好,谢谢!正是我想要的【参考方案2】:如果你想用cat
而不是echo
向stderr
打印消息,请尝试:
cat <<< "Usage: ..." >&2
【讨论】:
以上是关于当使用 cat 找不到参数时,Bash 打印帮助消息的主要内容,如果未能解决你的问题,请参考以下文章
bash中的heredoc里面的范围,我的$ PORT变量不起作用