如何在 ubuntu 16.04 中的脚本中获取命令未找到响应

如何在 ubuntu 16.04 中的脚本中获取命令未找到响应

我开始在 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。您必须重定向stderrorstdout

$ 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`

相关内容