我有一个Unix shell脚本,它使用标准输出和标准错误重定向到一个日志文件。例如:test.sh
:
ls -l &>> test.log
我的问题是,当我用sudo
运行脚本时:
sudo ./test.sh
&
被解释为“在后台运行”。有什么建议吗?test.sh
第一行没有像这样的shebang:
#!/bin/bash
#!/bin/bash
没有这一行,会影响脚本的执行方式。在你的情况下,由于root用户的设置,这意味着另一个shell(如ash
、ksh
、dash
或其他)将用于执行脚本。
请问 test.sh 文件中的 hash-bang 行是什么?请确保指定了支持该语法的 shell。实际上,我不确定是哪个 shell——sh、bash、ksh 和 csh 都没有 &>>
重定向操作符——但无论是哪个,您都需要明确指定它:
#!/bin/fancysh
或者,使用更具可移植性的语法。
#!/bin/sh
ls -l >> test.log 2>&1
ls -l >> test.log 2>&1
#!/bin/bash
我应该早点发现它...
ls -l >>& test.log
&
异步运行命令,而是任何人都不应该期望其他的结果!bash
从csh
借用了&>
的语法,但Bourne shell的语法明确将&>
视为&
命令终止符,后跟零命令重定向。不在后台运行命令的shell不符合标准。 - William Pursell