l0b*_*0b0 7 bash io-redirection restricted-shell
在我的 .bashrc 中有几个命令将标准错误重定向到 /dev/null,这在以下内容中是不允许的rbash
:
bash: /dev/null: restricted: cannot redirect output
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题(除了修改 Bash)?也就是说,要么
您可以关闭 stderr,如下所示:
ls /blah 2>&-
Run Code Online (Sandbox Code Playgroud)
虽然这在大多数情况下都有效,但它可能会导致问题,因为编写2
得不好的应用程序可能最终会打开一个新文件,该文件会自动作为文件描述符获取,并最终可能会在您不希望出现的地方写入错误消息。
这也意味着应用程序对 stderr 所做的任何写入都将返回错误 (EBADF),这可能会影响它们的行为。
由于允许使用管道,您可以提供一个丢弃所有输入的命令。在这里,使用grep -v '^'
(但您可以使用tail -n 0
或sed d
或脚本调用discard
它cat > /dev/null
):
{ ls /blah 2>&1 >&3 | grep -v '^'; } 3>&1
Run Code Online (Sandbox Code Playgroud)
或者,您可以让受限制的 shell 以重定向到/dev/null
( rbash 3> /dev/null
)的 fd 3(例如)启动它,这样您就可以在受限制的 shell 中执行以下操作:
ls /blah 2>&3
Run Code Online (Sandbox Code Playgroud)
这是允许的:
$ rbash -c 'ls /blah 2>&3' 3> /dev/null
$
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式检查是否/dev/null
允许/不重定向到:
if true 2>&- > /dev/null; then
echo allowed
fi
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令检查 shell 是否受到限制:
case $- in
(*r*) echo restricted
esac
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10495 次 |
最近记录: |