Shell 脚本使用变量存储输出重定向

Shell 脚本使用变量存储输出重定向

我有一个运行几个命令的“简单”脚本,通常我只想看到几个回显,让我知道它正在执行到哪里。但偶尔我需要一个详细的输出,向我显示正在执行的一些命令的输出。

正常使用示例

echo "Simple message"
wget 'http://example.com' > /dev/null

详细选项

echo "Simple message"
wget 'http://example.com'

我想到用变量来存储输出重定向

output=""
if [ -z "$1" ]
  then
    output="> /dev/null"
fi
echo "Simple message"
wget 'http://example.com' $output

问题是它似乎不起作用,所以我将 -x 添加到 shebang 中,输出显示

wget 'http://example.com' '>' /dev/null

我怎样才能阻止>被单引号?

原始脚本中除了简单的 wget 之外还有更多内容,这只是一个简短的示例。

答案1

将 wget 重定向到 stdout 允许您将脚本更改为如下所示:

#!/bin/bash
output="/dev/stdout"
if [ -z "$1" ]; then
output="/dev/null"
fi
echo "simple message"
wget -qO- 'http://example.com' > "$output"

这样,每当您的第一个参数为空时,它将始终重定向到 /dev/null,否则输出到 stdout。

如果您不想将其输出到标准输出,我建议创建一个文件(它将始终相同),然后在 wget 之后从中读取它。

相关内容