Bash 在unix中向文件追加时间

Bash 在unix中向文件追加时间,bash,time,terminal,append,io-redirection,Bash,Time,Terminal,Append,Io Redirection,我有一个程序,我将期末考试输入: time java SearchIt < input.txt 但是,每次执行代码时,都会创建一个新文件。我试过了 (time java SearchIt < input.txt)&>>SearchIt\ Result.txt (time java SearchIt>SearchIt\Result.txt 但是有一个语法错误 -bash:意外标记“>”附近出现语法错误 任何帮助都会很好,谢谢 试试这个: (time java

我有一个程序,我将期末考试输入:

time java SearchIt < input.txt
但是,每次执行代码时,都会创建一个新文件。我试过了

(time java SearchIt < input.txt)&>>SearchIt\ Result.txt
(time java SearchIt>SearchIt\Result.txt
但是有一个语法错误

-bash:意外标记“>”附近出现语法错误

任何帮助都会很好,谢谢

试试这个:

(time java SearchIt < input.txt) >>SearchIt\ Result.txt 2>&1
而且,实际上,您不需要任何子shell或代码块。在这种情况下,所有重定向都可以在单个命令中共存(在这个简单的情况下)

请注意,这将丢弃java应用程序的标准输出,但将其输出保留为标准错误(这通常很有用)。如果您真的想删除所有输出,请在
/dev/null
之后添加
2>&1

在您的情况下,对性能的影响可能是微不足道的,但一般来说,作为良好的编码实践,您应该尽可能避免使用子shell。除了性能之外,变量作用域也有好处(尽管在这里不相关)。代码块只是告诉shell如何执行命令的语法,它们本身不会创建额外的进程,额外的代码块对性能的影响可以忽略不计


顺便说一句,
&>
应该适用于Bash 4和更新版本,因此您可能正在使用较旧的版本,或者没有使用Bash。

要将进程的STDOUT附加到一个文件,并将时间命令输出(将输出到STDERR)附加到另一个文件,那么您可以执行以下操作

(time java SearchIt < input.txt) 1>> SearchItOutput.txt 2>> TimeOutput.txt
(time java SearchIt>SearchItOutput.txt 2>>TimeOutput.txt
如果您不想保存进程的STDOUT,但仍要打印它,那么您可以简单地这样做

(time java SearchIt < input.txt) 2>> TimeOutput.txt
(time java SearchIt>TimeOutput.txt
如果您甚至不想打印进程的标准输出(假设您是在类似linux的系统上)

(time java SearchIt/dev/null 2>>TimeOutput.txt

使用代码块而不是打开子shell也可能更好
{time java SearchIt>SearchIt\Result.txt 2>&1
@123:确切地说,您不需要生成新的shell。当然,您可以使用代码块,但我不想让它看起来像是解决方案的一部分(尽管更可取,它与所述问题无关)。我在回答中添加了它作为建议。谢谢,这太棒了!我怎么能在没有应用程序本身输出的情况下附加时间输出呢?@ZachNudelman请在我的回答中添加内容来实现这一点。
time java SearchIt < input.txt >>SearchIt\ Result.txt 2>&1
{ time  { java SearchIt < input.txt >/dev/null ; } ; } >>SearchIt\ Result.txt 2>&1
(time java SearchIt < input.txt) 1>> SearchItOutput.txt 2>> TimeOutput.txt
(time java SearchIt < input.txt) 2>> TimeOutput.txt
(time java SearchIt < input.txt) 1> /dev/null 2>> TimeOutput.txt