在以sudo权限运行的Linux shell脚本中使用重定向。

3

我有一个Unix shell脚本,它使用标准输出和标准错误重定向到一个日志文件。例如:test.sh

ls -l &>> test.log

我的问题是,当我用sudo运行脚本时:

sudo ./test.sh
&被解释为“在后台运行”。有什么建议吗?

重定向标准输出和标准错误流 - Itamar Katz
问题不在于&异步运行命令,而是任何人都不应该期望其他的结果!bashcsh借用了&>的语法,但Bourne shell的语法明确将&>视为&命令终止符,后跟零命令重定向。不在后台运行命令的shell不符合标准。 - William Pursell
5个回答

4
我猜你的脚本test.sh第一行没有像这样的shebang:

#!/bin/bash


请注意,shebang是一个指定用于执行文件的解释器的特殊注释。
#!/bin/bash

没有这一行,会影响脚本的执行方式。在你的情况下,由于root用户的设置,这意味着另一个shell(如ashkshdash或其他)将用于执行脚本。


3

请问 test.sh 文件中的 hash-bang 行是什么?请确保指定了支持该语法的 shell。实际上,我不确定是哪个 shell——sh、bash、ksh 和 csh 都没有 &>> 重定向操作符——但无论是哪个,您都需要明确指定它:

#!/bin/fancysh

或者,使用更具可移植性的语法。

#!/bin/sh
ls -l >> test.log 2>&1

1
你尝试过像这样运行吗:

ls -l >> test.log 2>&1 

0
问题在于脚本没有shebang行。
#!/bin/bash

我应该早点发现它...


-1
请将您的重定向顺序更改为:
    ls -l >>& test.log

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接