将输出写入$ file(允许它为stdout)

时间:2015-07-24 21:49:50

标签: bash shell unix command-line sh

假设我有这个脚本:

logfile=$1
echo "This is just a debug message indicating the script is starting to run..."

# Do some work...

echo "Results: x, y and z." >> $logfile

是否可以从命令行调用脚本,使$logfile实际上是stdout?

为什么呢?我想有一个脚本将 的输出部分打印到stdout或者可选地打印到文件。

“但是,当您要写入文件时,为什么不删除>> $logfile部分并仅使用./script >> filename调用它?”,您可能会问。

好吧,因为我只想对某些输出消息执行“可选重定向”操作。在上面的示例中,只有第二条消息应该受到影响。

1 个答案:

答案 0 :(得分:7)

如果您的操作系统是Linux或类似的符合约定的东西,请使用/dev/stdout。或者:

#!/bin/bash

# works on bash even if OS doesn't provide a /dev/stdout
# for non-bash shells, consider using exec 3>&1 explicitly if $1 is empty
exec 3>${1:-/dev/stdout}

echo "This is just a debug message indicating the script is starting to run..." >&2
echo "Results: x, y and z." >&3

这比将>>"$filename"放在应该登录到文件的每一行上更有效率 },这会重新打开文件以便在每个命令上输出。