x-y*_*uri 8 shell su io-redirection shell-script
我的猜测如下:
echo "Generating some text" | su - -c cat >/output/file
Run Code Online (Sandbox Code Playgroud)
但是su说:
su: must be run from a terminal
Run Code Online (Sandbox Code Playgroud)
你会怎么办?
sudo 支持这一点。
$ echo hello world | sudo cat
SUDO password:
hello world
Run Code Online (Sandbox Code Playgroud)
不同之处在于sudo要求您提供用户密码,而不是root(目标用户)密码。不过,如果你愿意的话,你可以更改与这种行为targetpw(或runaspw或rootpw在)指令sudoers.conf。
然而,阅读你想要做的事情,虽然这解决了权限升级问题,但它不会像你期望的那样做。意思是/output/file不会以 root 用户身份创建,而是以您的用户身份创建/修改。
这样做的原因是 shell 输出重定向是在调用任何命令之前完成的。所以外壳打开/output/file,然后将打开的文件传递给su/ sudo(因此,cat)。
但是,您可以使用它tee来代替,因为该tee实用程序将打开文件本身。
echo "hello world" | sudo tee /output/file >/dev/null
Run Code Online (Sandbox Code Playgroud)
基本上tee将输出复制到/output/file和 STDOUT,但是 STDOUT 被重定向到/dev/null.
你也可以这样做:
echo "hello world" | sudo sh -c 'cat > /output/file'
Run Code Online (Sandbox Code Playgroud)
......这不那么神秘。
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |