无法在 FreeBsd 中重定向输出

无法在 FreeBsd 中重定向输出

在 Freebsd 系统上,我运行 bash 脚本并尝试重定向输出:

% sudo bash some_file.sh arg1 >/dev/null  2>&1
Ambiguous output redirect.


% sudo bash some_file.sh arg1 &> /dev/null
Invalid null command.

答案1

似乎您在命令行上使用了 csh (使用 进行检查echo $SHELL)。

  • 使用 csh 语法重定向 stdout 和 stderr 将是:sudo bash some_file.sh arg1 >& /dev/null
  • 或者将重定向移动到命令的“bash 部分”sudo bash -c 'some_file.sh arg1 >/dev/null 2>&1'

答案2

您已经很接近了,但是这两种语法都不是 TENEX C shell 的正确语法。

请记住:除非您进行了更改,否则您在 FreeBSD 上使用的交互式登录 shell 是 TENEX C shell。命令的重定向sudo必须使用 TENEX C shell 的重定向语法。您是否通过 运行 Bourne Again shell 并不重要sudo。这只是确定的重定向发生并sudo已运行后

这:

% sudo bash some_file.sh arg1 >/dev/null 2>&1
实际上等同于

% >/dev/null >&1 sudo bash some_file.sh arg1 2
它尝试将标准输出两次重定向到两个不同的位置。

这:

% sudo bash some_file.sh arg1 &> /dev/null
实际上是

% sudo bash some_file.sh arg1 & > /dev/null
并将在您的命令历史记录中被重写。它是由 , 连接的两个命令&sudo以及一个没有名称和参数的命令。 TENEX C shell 中不允许后者。

以下是将标准输出和标准错误重定向到/dev/nullTENEX C shell 的方法:

% sudo bash some_file.sh arg1 >& /dev/null

相关内容