我想在我的shell脚本中运行一些命令但是想知道一些方法,它什么也不返回。
示例:
#! / bin / bash]
rm / home / user
return: rm: can not lstat `/ home / user ': No such file or directory
我会让命令无形地运行而不返回!
答案 0 :(得分:4)
要抑制命令的标准输出,传统方法是使用somecommand arg1 arg2 > /dev/null
将输出发送到空设备。为了抑制错误输出,可以将标准错误重定向到同一位置:somecommand arg1 arg1 > /dev/null 2>&1
。
答案 1 :(得分:1)
您的直接错误来自路径中的错误间距,路径中的rm /home/whatever
应该没有空格,假设您在目录名称中没有实际空格(在这种情况下,您需要引用或正确逃脱)
关于抑制输出。重定向stdout在这里有点奇怪。
$ touch test.txt
$ rm test.txt > /dev/null 2>&1
^ interactive rm is actually asking if you really want to delete the file here, but not printing the message
如果您只是想获取错误消息,只需将stderr(文件描述符2)重定向到/ dev / null
$ rm test.txt 2> /dev/null
或
$ rm test.txt 2>&-
如果您希望它不提示do you really want to delete
输入消息,请使用强制标记-f
$ rm -f test.txt 2> /dev/null
或
$ rm -f test.txt 2>&-
要删除您想要rmdir
的目录,如果该目录为空或使用递归-r
标记,则会删除所有内容 / home / user,这样您就可以了这里需要小心。
除非你让它以--verbose
模式运行,否则我无法想到它需要关闭rm
命令的stdout。
同样在bash 4中,如果你想将stdout和stderr重定向到同一个位置,只需使用rm whatever &> /dev/null
或类似的东西