我正在尝试创建一个 QShell 命令来输出完成任务所花费的时间。当我在 cygwin 中运行它时,我的命令似乎很好,但在 QShell 中没有产生任何东西。例如,这是我用来获取 ls 实时时间的命令
(time ls) 2>&1 | grep real | cut -f2 >> log.txt
我在这里错过了什么吗?
我正在尝试创建一个 QShell 命令来输出完成任务所花费的时间。当我在 cygwin 中运行它时,我的命令似乎很好,但在 QShell 中没有产生任何东西。例如,这是我用来获取 ls 实时时间的命令
(time ls) 2>&1 | grep real | cut -f2 >> log.txt
我在这里错过了什么吗?
QSH 是一个类 Unix 环境。重定向有一些奇怪的地方。IBM 有一个名为Redirecting Output in Qshell的文档简要介绍了这一点。我发现以下工作,如果笨重:
{ time ls *.txt; } > /dev/null 2> time.txt; grep real time.txt | cut -c10-20 >> log.txt; rm time.txt
如果不转到文件,我无法重定向 STDERR。
这里的区别是time
Cygwin 中的一个程序,但在 QSHELL 中它是一个内置实用程序(如echo
)。我认为您不能重定向内置实用程序的输出。
要查看某个东西是内置实用程序还是程序,您可以使用该type
命令。例如type echo
将输出:
echo is a shell built-in.
而type time
将输出:
time is a reserved word.
您还可以查看 /usr/bin 的内容。ls /usr/bin/t*
:
/usr/bin/tail /usr/bin/test /usr/bin/tr
/usr/bin/tar /usr/bin/tnameserv
/usr/bin/tee /usr/bin/touch
在 Cygwin 中(或者在我的情况下,在 Linux 机器上)输入which time
,你会得到
/usr/bin/time
它似乎是与 qshell、子shell 和/或本机time
实用程序相关的怪癖。
QSH
===> time ls
test_file
real 0m0.054384s
user 0m0.054384s
sys 0m0.000000s
===> (time ls)
test_file
使用PASE可以正常工作:
QP2学期
===> time ls
test_file
real 0m0.10s
user 0m0.01s
sys 0m0.02s
===> (time ls)
test_file
real 0m0.14s
user 0m0.01s
sys 0m0.02s