0

$output我正在尝试创建一个 shell 脚本,事实是,如果变量已填充,我想更改输出。我正在考虑使用if命令内部的变量检查变量,但我不知道它是否是正确的语法。这是一个例子(当然这不起作用):

ls -丽莎 | awk '$5 == own' own="$owner" | 排序 -k$column -n if [ $output ]; 然后打印 > out.txt fi

我不知道它是否会以这种方式工作以及是否可能。

4

2 回答 2

1

内置的 exec 可以更改正在运行的 shell 脚本的其余部分的默认标准输出。所以,在这种情况下,你会这样做:

if [ -n "$output" ]; then
    exec >out.txt
fi
ls -lisa | awk '$5 == own' own="$owner" | sort -k$column

我不完全确定你想用 awk 部分做什么,所以这只是你问题的逐字记录。

另一种选择是将要重定向的脚本部分放入函数中,然后以两种方式之一调用该函数,重定向输出。例子:

do_work() {
    ls -lisa | awk '$5 == own' own="$owner" | sort -k$column
}
if [ -n "$output" ]; then
    do_work >out.txt
else
    do_work
fi
于 2013-03-17T02:59:39.643 回答
1

您可以使用 shell 的“使用默认值”选项(${variable:-default},以 /dev/stdout 作为默认值)来执行此操作:

ls -lisa | awk '$5 == own' own="$owner" | sort -k$column -n > "${output:-/dev/stdout}"
于 2013-03-17T05:57:32.523 回答