Bash 如果()</dev/null
我不能对这件事耿耿于怀。为什么要将Bash 如果()</dev/null,bash,unix,Bash,Unix,我不能对这件事耿耿于怀。为什么要将/dev/null用作if语句的输入?&1;然后 $PROG 其他的 回显“失败” 出口1 fi 我(想)我知道/dev/null 2>&1只是用来抑制stdout和stderr的任何输出,如果$PROG是一个需要从stdin输入的程序,那么脚本可能会永远停止,等待您键入内容。&1你说得对 这段脚本正在检查$PROG--version是否以0状态(成功)退出,然后在没有任何标志的情况下运行该程序。如果$PROG--version失败,脚本将回显“failed”
/dev/null
用作if
语句的输入?
在以下内容中有什么用途
if ( $PROG --version ) < /dev/null > /dev/null 2>&1; then
$PROG
else
echo "failed"
exit 1
fi
if($PROG--version)/dev/null 2>&1;然后
$PROG
其他的
回显“失败”
出口1
fi
我(想)我知道
/dev/null 2>&1
只是用来抑制stdout
和stderr
的任何输出,如果$PROG
是一个需要从stdin
输入的程序,那么脚本可能会永远停止,等待您键入内容。
的用途是为这样的程序提供一个空输入。关于
和2>&1
你说得对
这段脚本正在检查
$PROG--version
是否以0状态(成功)退出,然后在没有任何标志的情况下运行该程序。如果$PROG--version
失败,脚本将回显“failed”并退出。我想您可能想知道为什么重定向在括号外
在这方面:
if ( $PROG --version ) < /dev/null > /dev/null 2>&1; then
将产生以下输出:
ONE
TWO
在本例中,由于$PROG--version
是一个命令,因此不需要括号(除非$PROG
扩展为多个命令,但不太可能)
因此重定向不适用于if
语句;它适用于$PROG--version
。其目的是不向$PROG
提供任何输入(就像从空文件读取一样),并丢弃它写入stdout或stderr的任何内容。如果$PROG
是一个从stdin读取的命令,即使在使用--version
调用时,如果没有输入重定向,它也可能挂起等待键盘输入
脚本假定只有在$PROG--version
不产生错误时,才可以安全地调用$PROG
(无论是什么)
请注意,您可以对if语句应用重定向:
if test_command ; then
something
else
something_else
fi < /dev/null > /dev/null 2>&1
if-test\u命令;然后
某物
其他的
还有别的吗
fi/dev/null 2>&1
这将重定向
test_命令
、某物
、以及其他某物
的输入和输出。谢谢。如果我知道$PROG
是什么,并且知道PROG--version
没有等待输入,我仍然不确定这有多有用。例如,PROG=autoconf
就是我看到这一点的地方。我知道,autoconf--version
并没有等待输入。在这种情况下它仍然有用吗?@Carl Norum,这里是否可以使用if(“$PROG--version”)
(带尖括号)来执行命令,因此不需要
?@fduff:(a)您的注释中没有尖括号。(b) 您有单引号,这将导致shell将'$PROG--version'
视为字符串文字,而不是要执行的命令,这将是一个错误,除非您碰巧有一个名为'$PROG--version'
的命令。你能澄清一下你的问题吗?我的意思是:“$PROG--version
”来执行命令。“”在SO中用于
code`格式。谢谢您的回答!我确实对括号感到困惑。谢谢你为我把它分解并举例说明。很好的解释。
if test_command ; then
something
else
something_else
fi < /dev/null > /dev/null 2>&1