【发布时间】:2012-04-20 02:52:25
【问题描述】:
在 Unix shell 脚本中,可以从内部脚本本身重定向标准错误和标准输出,如下所示:
#!/bin/ksh
# script_name: test.sh
export AUTO_LOGFILE=`basename $0 .sh`.log
# stdout and stderr Redirection. This will save the old stdout on FD 3, and the old stderr on FD 4.
exec 3>&0 4>&1 >>$AUTO_LOGFILE 2>&1
echo "Hello World"
# The above echo will be printed to test.log
实际上,test.sh 可以简单地执行为:
test.sh
代替:
test.sh >> test.log 2>&1
我正在尝试在批处理脚本中做类似的事情。我的批处理代码如下:
@echo off & setlocal enableextensions enabledelayedexpansion
REM script_name=test.bat
set AUTO_LOGFILE=%~n0.log
REM How to do the stdout and stderr redirection from within the script itself here?
如何从批处理脚本本身重定向标准错误和标准输出?我更感兴趣的是将这个 unix shell 脚本语句转换为等效的批处理代码:
exec 3>&0 4>&1 >>$AUTO_LOGFILE 2>&1
【问题讨论】:
-
您的问题与此重复:[是否可以在脚本内重定向批处理文件的输出?][1] [1]:stackoverflow.com/questions/4607390/…
-
@Mac 我需要在脚本的后半部分执行许多命令并调用许多子例程。正如您提供的链接中的答案中提到的那样,我不能简单地在函数 testitout 中做到这一点。
-
不确定,但如果你有一个子例程,就像你的 main 调用其他子例程一样,那不行吗?
-
@MAC 嗯...会调查的。但我更感兴趣的是将此 unix shell 脚本语句转换为等效的批处理代码: exec 3>&0 4>&1 >>$AUTO_LOGFILE 2>&1
-
我认为 0 是标准输入、1 标准输出和 2 标准错误。那么你的 exec 行不应该是
exec 3>&1 4>&2 >>$AUTO_LOGFILE 2>&1吗?
标签: batch-file