隐藏命令的输出


31

我有一个脚本,用于检查是否安装了软件包以及特定进程是否正在使用端口8080。我对bash完全没有经验,所以我做了这样的事情:

if dpkg -s net-tools; then
    if  netstat -tlpn | grep 8080 | grep java; then
        echo "Shut down server before executing this script"
        exit
    fi
else
    echo "If the server is running please shut it down before continuing with the execution of this script"
fi

# the rest of the script...

但是,当执行脚本时,我会在终端中同时获得dpkg -s net-toolsnetstat -tlpn | grep 8080 | grep java输出,而我不希望那样,如何隐藏输出并仅坚持ifs 的结果?

另外,还有一种更优雅的方式来执行我的操作吗?而且有一个更优雅的方式来知道哪些进程正在使用的端口8080(不只是如果了所使用的话),如果有的话?

Answers:


53

要隐藏任何命令的输出,通常将stdoutstderr重定向到/dev/null

command > /dev/null 2>&1

说明:

1 command > /dev/null.:将command(stdout)的输出重定向到/dev/null
2 .:2>&1重定向stderrstdout,因此错误(如果有)也进入/dev/null

注意

&>/dev/null:将stdout和都重定向stderr/dev/null。一个人可以用它代替/dev/null 2>&1

静音grepgrep -q "string"无声或无声地匹配字符串,而没有任何标准输出。它也可以用来隐藏输出。

就您而言,您可以像这样使用它,

if dpkg -s net-tools > /dev/null 2>&1; then
    if  netstat -tlpn | grep 8080 | grep java > /dev/null 2>&1; then
    #rest thing
else
    echo "your message"
fi

在这里,if条件将像以前一样被检查,但是不会有任何输出。

回复评论

netstat -tlpn | grep 8080 | grep java > /dev/null 2>&1:它将重定向从grep java第二个管道之后发出的输出。但是你从中得到的信息netstat -tlpn。解决方法是使用第二个if作为

if  [[ `netstat -tlpn | grep 8080 | grep java` ]] &>/dev/null; then

1
您还可以提及grep -q,以及较新的bash &> ...作为“ > ... 2>&1
steeldriver”

谢谢,这增强了脚本。但是我仍然收到一条消息,说某些进程无法显示,因为它没有以root身份执行。发生这种情况netstat。有什么办法我也可以隐藏吗?
dabadaba 2014年

1

lsof -i :<portnumnber> 应该能够按照您想要的方式做某事。


抱歉,我忘了在帖子中添加真正的问题,请再次进行检查,因为您的回答仅是“次要”问题
dabadaba 2014年

我也可以从该命令的输出中提取进程名称/ PID吗?
dabadaba 2014年

完成此操作的另一种方法是fuser -n tcp 8080,其输出可能更易于解析。
fkraiem 2014年

0

虽然将输出刷新到其中/dev/null可能是最简单的方法,但有时会/dev/null设置文件权限,以便非root用户无法在此处刷新输出。因此,另一种非root用户的方法是

command | grep -m 1 -o "abc" | grep -o "123"

这种双重grep设置会找到其中包含的匹配行,abc并且由于-o设置仅abc被打印,并且仅被打印一次-m 1。然后将输出为空或abc发送至grep 的输出仅查找匹配的字符串部分,123由于最后一条命令仅输出abc空字符串,因此返回该字符串。希望有帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.