假设我有这个脚本:
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
调用它?”,您可能会问。
好吧,因为我只想对某些输出消息执行“可选重定向”操作。在上面的示例中,只有第二条消息应该受到影响。
答案 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"
放在应该登录到文件的每一行上更有效率