![如何在 ubuntu 16.04 中的脚本中获取命令未找到响应](https://linux22.com/image/1059095/%E5%A6%82%E4%BD%95%E5%9C%A8%20ubuntu%2016.04%20%E4%B8%AD%E7%9A%84%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%91%BD%E4%BB%A4%E6%9C%AA%E6%89%BE%E5%88%B0%E5%93%8D%E5%BA%94.png)
我开始在 ubuntu 中编写脚本。这很容易,而且很好。在我的 shell 脚本中,我需要运行几个 linux 命令来更改目录,或者删除文件或复制文件或任何其他命令。所以我想知道是否有可能在脚本中获取命令未找到通知,以便如果任何命令在任何时候失败,我们都可以在终端上向用户显示错误消息。
我在谷歌上搜索了一下,发现使用下面的方法我们可以读取终端响应:
fooVar=$(ls)
echo "Response: $fooVar"
因此上面我在终端上运行ls
命令,它看起来像这样:
Response:
folder1
folder2
file1
file2
但如果我做类似的事情
fooVar=$(lsv)
echo "Response: $fooVar"
它给了我一个错误lsv command not found
,这是可以的,因为lsv
它不是一个命令,但这个字符串应该是这样的
Response: lsv command not found
这是可能的吗,还是我走错了路。另外,我们如何才能为这个错误设置一个 if 条件。请帮忙。谢谢
答案1
错误,
未找到 lsv 命令
是发送到stderror
而正常输出是发送到stdout
。您必须重定向stderror
到stdout
:
$ fooVar=$(lsv 2>&1)
$ echo "Response: $fooVar"
Response: -bash: lsv: command not found
这几乎就是你想要的,除了-bash:
Stdout 有文件描述符 1,而 stderr 有描述符 2。所以我说的是“将 stderr 发送到与 stdout 相同的位置”。您可以使用类似的东西将输出或错误放入文件:
ls > outfile 2> errorfile
会将正常输出放入名为“outfile”的文件中,并将最终错误放入“errfile”中。
ls >> outfile 2>> errorfile
将附加到文件而不是重置它们。并且您只能使用一个或另一个重定向。
答案2
尝试这个:
fooVar="lsv"
echo -n "Response "; echo `$fooVar`