如何在执行Linux shell脚本时关闭回显

15

这是我正在做的一个简单的东西

 echo "please enter a command"
 read x
 $x
 checkexitstatus()
 {...}

checkexit状态是一个在其他地方创建的if循环,用于检查退出状态。

我的问题是:当我运行$ x时,有没有办法不将其显示在屏幕上?我想知道是否可能在不将输出重定向到文件的情况下实现此目的。


3
为了抑制错误信息,可以使用$x > /dev/null 2>&1,而不是只用$x。这个命令的意思是将$x的输出重定向到空设备文件/dev/null中,并将标准错误输出通道2也重定向到标准输出通道1中。 - devnull
@AkyJ 如果你想将输出存储到文件中,你应该使用除了/dev/null之外的其他东西。 - Idriss Neumann
3个回答

8
不,这是不可能的。
$x &> /dev/null

非常感谢。 我使用了像devnull建议的$x > /dev/null 2>&1。 - AkyJ
@AkyJ 如果你想将输出存储到文件中,你应该使用除了/dev/null之外的其他东西。 - Idriss Neumann

6
您可以使用Bash重定向:
  • command 1> /.../path_to_file => 将stdout重定向到path_to_file。

command > /.../path_to_file 是上一个命令的快捷方式。

  • command 2> /.../path_to_file => 将stderr重定向到path_to_file

同时将两个内容重定向到同一个输出: command >/.../path_to_file 2>&1.

2>&1 意味着将2(stderr)重定向到1(stdout,并变成 path_to_file)。如果您不想检索命令的输出,可以将path_to_file替换为/dev/null

另外,您也可以存储命令的输出:

$ var=$(command) # Recent shell like Bash or KSH
$ var=`command` # POSIX compliant

在这个例子中,command的输出将会被存储在$var中。

1
感谢您提供的信息并解释了2&>1的实际作用 :) - AkyJ
@AkyJ 很高兴能帮助你。 - Idriss Neumann

5

如果你只想关闭echo命令而不是其他将其输出发送到stdout的命令,正如标题所示,你可以可能(这可能会破坏代码)为echo创建一个别名。

alias echo=':'

现在 echonoop 的别名。你可以通过 unalias echo 取消它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接