我有这个:
$ echo $SHELL
/bin/sh
$ uname -a
FreeBSD 11.0-RELEASE-p8
这有效:
sudo bash my_script.sh some_arg
但这不是:
sudo bash my_script.sh some_arg >& /dev/null
错误:
-sh: Syntax error: Bad fd number
在默认 bash 作为 shell 的 Linux 中,这可以正常工作。
如何修复它?
在脚本中我有这个:
#!/usr/local/bin/bash
# other stuff
答案1
bash
确实支持这一点,但您明确声明您当前的 shell 不是bash
,而是sh
,这是一个不同的 shell。
答案2
bash
确实支持>&
,但/bin/sh
不支持(至少不支持重定向到文件)。
您的命令行被解释为/bin/sh
前被传递到sudo
和bash
。
我无法对此进行测试bash
(但它适用于其他 shell) - 您可以尝试使用-c
带引号字符串的选项:
sudo bash -c "my_script.sh some_arg >& /dev/null"
答案3
正确的语法是:
sudo my_script.sh some_arg > /dev/null 2>&1