如果命令结果为空,则执行替代命令(在一行命令中)

如果命令结果为空,则执行替代命令(在一行命令中)

我正在尝试将某个 IP 添加到主机文件中。可以使用 2 个不同的命令检索此 IP,但最好的命令并不总是返回它。

我正在尝试编写一个命令来检查第一个命令,如果它返回 IP,则将该行添加到文件中,否则使用第二个命令。

优先命令:

docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'

替代命令:

ifconfig docker | grep -oP 'inet:\K[^ ]+'

我试过写一个如果别的命令使用-eq ''or-ne 0但当我尝试使用它作为参数在主机文件中添加该行时,我无法使其工作。

它可能是这样的(但是在一行 shell 命令中):

if [ docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+' -ne 0 ] ;
  then sudo echo $(docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+') "symfony.dev" >> /etc/hosts;
  else sudo echo $(ifconfig docker0 | awk '/inet:/{ print substr($2,6); exit }') "symfony.dev" >> /etc/hosts;
fi

答案1

if与任何其他命令一样,可以对语句收集的输出进行重定向或通过管道传输。

if ! docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'; then
    ifconfig docker | grep -oP 'inet:\K[^ ]+'
fi | sudo tee -a /etc/hosts > /dev/null

其中唯一需要 root 权限的部分是打开/etc/hosts写入,因此我将输出重定向替换为sudo tee.

相关内容