1

我正在尝试创建一个 QShell 命令来输出完成任务所花费的时间。当我在 cygwin 中运行它时,我的命令似乎很好,但在 QShell 中没有产生任何东西。例如,这是我用来获取 ls 实时时间的命令

(time ls) 2>&1 | grep real | cut -f2 >> log.txt

我在这里错过了什么吗?

4

3 回答 3

2

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。

于 2013-08-08T17:58:14.883 回答
1

这里的区别是timeCygwin 中的一个程序,但在 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
于 2013-08-08T17:40:31.367 回答
1

它似乎是与 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
于 2013-08-08T17:48:18.923 回答