仅在输出时保存命令输出(Unix CLI)

时间:2017-12-01 22:36:45

标签: bash shell

我有一个占位符文件,并且只有在输出不是零长度时才想用命令输出覆盖它。我想我可以FOO="$(command)"然后[-z $FOO]。还有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

如果您不需要输出命令,可以直接运行:[ -z "$(command)" ]。例如,以下打印“空”:

#!/bin/sh
if [ -z "$(echo -n)" ]; then
    echo "empty"
fi

答案 1 :(得分:1)

有不同的方式,但我不知道“更好”。您可以阻止读取,只有在某些数据通过后才设置重定向:

cmd | { read j && { echo "$j"; cat; } > placeholder; }

(注意,如果您的命令生成输出但没有换行符,则会忽略数据。)

答案 2 :(得分:0)

-z的示例可以使用,但您也可以使用

检查变量是否为非空
[ "$var" ]

因此,一个简单的解决方案可能如下所示:

#!/bin/sh

output="$( command )"
[ "$output" ] && echo "$output" > your_file.txt

答案 3 :(得分:0)

如果你要做很多这样的事情,最好做一个功能:

write_if_non_zero(){
  local msg=$1
  local file=$2
  if [[ ! -z "$msg" ]]; then
    echo "$msg" > "$file"
  fi
}

然后

write_if_non_zero "$FOO" "$FILE"