Bash(如果不是)或使用两个命令

Bash(如果不是)或使用两个命令,bash,shell,if-statement,command,pipe,Bash,Shell,If Statement,Command,Pipe,我想检查是否存在两个程序 if ! [ type gedit ] || ! [ type vim ]; then echo "Installing programs" #code fi #当其中一个丢失时,需要运行代码 真正的方式是什么 if ! type gedit vim &>/dev/null; then echo "Installing programs" #code fi 测试命令[的目的是根据某些条件设置退出状态,如文件存在或两个字符

我想检查是否存在两个程序

if ! [ type gedit ] || ! [ type vim ]; then
    echo "Installing programs"
    #code
fi
#当其中一个丢失时,需要运行代码

真正的方式是什么

if ! type gedit vim &>/dev/null; then
    echo "Installing programs"
    #code
fi
测试命令
[
的目的是根据某些条件设置退出状态,如文件存在或两个字符串相等。此处不需要这样做,因为
type
本身设置了一个有用的退出状态

另外,请注意,您可以指定多个名称作为
type
的参数。仅当找到所有名称时,它才会返回零退出状态


&>/dev/null
操作系统的目的是将类型的所有输出(包括stdout和stderr)发送到
/dev/null
。如果您确实想查看其输出,请删除该重定向。

请注意,
&>
重定向是一种bash主义,在所有shell中都不会得到尊重。事实上,bash的行为可以说是不符合规范的应通过异步运行cmd来解释sh标准中的e和
cmd&>文件
,然后截断文件(如破折号所解释的)。要可移植地重定向,请使用
cmd>/dev/null 2>&1