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

将shell脚本的输出重定向到文件,shell,scripting,Shell,Scripting,我正在尝试重定向脚本的输出,需要在脚本内部调用它 filename=uname -a filename="$filename" date 2>&1 | tee $filename".txt" 这就是我目前所知道的,但显然是错误的。我知道的不多,所以非常感谢您的帮助 -Alex您应该使用echo将所有内容打印到控制台。然后您可以将其重定向到日志。例如: # my_file.sh echo "Doing stuff" # Do stuff # Invocation: my_fil

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

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

2>&1 | tee $filename".txt"
这就是我目前所知道的,但显然是错误的。我知道的不多,所以非常感谢您的帮助


-Alex

您应该使用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

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

# 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

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

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

顺便问一下,您确定要使用
uname-a
作为文件名吗?您可能还需要考虑格式化日期,例如“代码>日期+%y%M%D%%H%M%S/<代码>。

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

filename="$(uname -a)$(date)"
顺便问一下,您确定要使用
uname-a
作为文件名吗?您可能还需要考虑格式化日期,例如“代码>日期+%y%M%D%%H%M%S/<代码>。 。。。 如果你看看我上面贴的代码 我正在尝试动态命名日志 并使用T形三通打印到 控制台和命令行

我想你在找这样的东西:

filename="$(uname -n)-$(date +%F).txt"
{
  dostuff
  domorestuff
} 2>&1 | tee "$filename"
。。。 如果你看看我上面贴的代码 我正在尝试动态命名日志 并使用T形三通打印到 控制台和命令行

我想你在找这样的东西:

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

这并没有真正回答我的问题。如果你看一下我上面发布的代码,我试图动态命名日志,并使用tee打印到控制台和命令行,但这并不能真正回答我的问题。如果您查看我上面发布的代码,我将尝试动态命名日志,并使用tee打印到控制台和命令行。可能的重复项--抱歉,这是无耻的广告,但我不想复制我的答案。;-)很抱歉,这是无耻的广告,但我不想复制我的答案