当使用 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),则显示帮助消息,否则,运行您的核心程序逻辑。你根本不需要catecho。 :) 参数的数量已经被检查过了。当没有参数并且我正在使用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而不是echostderr打印消息,请尝试:

cat <<< "Usage: ..." >&2

【讨论】:

以上是关于当使用 cat 找不到参数时,Bash 打印帮助消息的主要内容,如果未能解决你的问题,请参考以下文章

bash中的heredoc里面的范围,我的$ PORT变量不起作用

通过桌面图标运行 bash 脚本时找不到节点命令

使用 git bash 运行 bash 脚本时出现“找不到免费命令”

以相反的顺序打印bash参数

Bash不会在for循环中打印带问号的字符串

bash:找不到nodemon命令Windows 10