将shell脚本的输出重定向到文件

时间:2010-03-08 18:29:49

标签: shell scripting

我正在尝试重定向我的脚本输出,需要在脚本中调用它。

filename=uname -a
filename="$filename" date

2>&1 | tee $filename".txt"

这就是我到目前为止所做的,但这显然是错误的。我不太了解SH脚本,所以非常感谢帮助

-Alex

3 个答案:

答案 0 :(得分:4)

filename=uname -a
filename="$filename" date

2>&1 | tee $filename".txt"
     

...   如果你看看我上面发布的代码   我正在尝试动态命名日志   并使用三通打印到两者   控制台和命令行。

我认为你正在寻找这样的东西:

filename="$(uname -n)-$(date +%F).txt"
{
  dostuff
  domorestuff
} 2>&1 | tee "$filename"

答案 1 :(得分:1)

错误,因为您没有正确分配变量。假设date是GNU日期,而不是您创建的某些“日期”函数。你可能正在寻找。使用$()语法执行命令并将其置于变量。

filename="$(uname -a)$(date)"

顺便问一下,您确定要将uname -a用于文件名吗?您可能还需要考虑格式化日期,例如date +%Y%m%d-%H%m%s

答案 2 :(得分:0)

您应该使用echo将所有内容打印到控制台。然后,您可以将其重定向到日志。例如:

# my_file.sh
echo "Doing stuff"
# Do stuff

# Invocation:
my_file.sh > my_log.log

这为您提供最大的灵活性和优雅。

您也可以直接从脚本写入日志,例如:

# my_file.sh
echo "Doing stuff" > my_log.log
# Do stuff