我需要在txt文件中写下执行此命令所花费的时间:
time ./program.exe
Run Code Online (Sandbox Code Playgroud)
我怎么能用bash脚本做?
我尝试>> time.txt但不起作用(输出不会转到文件并进入屏幕).
Jon*_*ler 22
获得time在bash写一个文件是艰苦的工作.它是一个bash内置命令.(在Mac OS X上,有一个外部命令,/usr/bin/time它执行类似的工作,但具有不同的输出格式和较少的顽固性.)
你需要使用:
(time ./program.exe) 2> time.txt
Run Code Online (Sandbox Code Playgroud)
它写入标准错误(因此2>表示法).但是,如果您不使用子shell(括号),它将不起作用; 输出仍然出现在屏幕上.
或者,如果没有子shell,您可以使用:
{ time ./program.exe; } 2> time.txt
Run Code Online (Sandbox Code Playgroud)
注意打开支架和分叉后的空间; 两者都是必须的.括号必须出现在那里的命令可能出现,而且必须是独立的符号.(如果你足够努力,你会想出...;}|something或者...;}2>&1.这两个都将大括号标识为一个独立的符号.如果你尝试...;}xyz,shell会(可能)找不到一个叫做的命令}xyz.)
我需要在更多终端运行更多命令.如果我这样做:
Run Code Online (Sandbox Code Playgroud)xterm -xrm '*hold: true' -e (time ./Program.exe) >> time.exe & sleep 2它不起作用并告诉我
Syntax error: "(" unexpected.我该如何解决?
您需要执行以下操作:
xterm -xrm '*hold: true' -e sh -c "(time ./Program.exe) 2> time.txt & sleep 2"
Run Code Online (Sandbox Code Playgroud)
关键的变化是运行shell,脚本来自-c选项的参数; 您可以替换sh为/bin/bash或等效的名称.这应该解决任何"语法错误"问题.我不太确定是什么触发了这个错误,因此可能有一种更简单,更好的方法来处理它.这也是可以想象xterm的-e选项只需要一个字符串参数,在这种情况下,我想你会使用:
xterm -xrm '*hold: true' -e 'sh -c "(time ./Program.exe) 2> time.txt & sleep 2"'
Run Code Online (Sandbox Code Playgroud)
你也可以手动打击xterm.
我不确定你为什么在后台模式下运行定时程序,但这是你的问题,而不是我的问题.同样,sleep 2如果hold: true保持终端打开,则显然不需要.