没有 bash -c 的 sudo echo 有哪些替代方法
what alternative methods for sudo echo without bash -c
我必须 运行 脚本 my.sh
中的 echo
和 sudo
因为许可。
我不想用 sudo my.sh
执行脚本。
我不想使用 bash -c "..."
因为转义。
没有其他解决方案吗?
my.sh
#!/usr/bin/bash
>/file.tmp \
echo '
a="S T"
z=\a\b\c\
'
您在这里遇到的问题是输出重定向 >/file.tmp
必须在提升权限的情况下发生。这意味着您要么必须像使用 sudo my.sh
一样启动脚本,要么以赋予其提升权限的方式执行重定向。 运行 sudo echo
是不够的,因为只有 echo
会提升权限,但输出重定向会 运行 作为您的 non-root 用户,因为它是 shell 内置功能,不是外部命令。
有一个名为 tee
的标准工具可以帮助解决这个问题。这种方法常用在运行宁curl
取数据需要喂给root的时候,比如installing debian apt repository configurations and signing keys.
$ whoami
dho
$ whoami | sudo tee whoami.txt >/dev/null
$ ls -la whoami.txt
-rw-r--r-- 1 root root 4 2022-06-03T09:08:22 whoami.txt
所以你可以看到我用我自己的用户启动了 whoami
,但是文件最终是用 root 权限写入的,因为 tee
取代了你原来例子中的输出重定向,是作为 sudo tee
.
发布
我必须 运行 脚本 my.sh
中的 echo
和 sudo
因为许可。
我不想用 sudo my.sh
执行脚本。
我不想使用 bash -c "..."
因为转义。
没有其他解决方案吗?
my.sh
#!/usr/bin/bash
>/file.tmp \
echo '
a="S T"
z=\a\b\c\
'
您在这里遇到的问题是输出重定向 >/file.tmp
必须在提升权限的情况下发生。这意味着您要么必须像使用 sudo my.sh
一样启动脚本,要么以赋予其提升权限的方式执行重定向。 运行 sudo echo
是不够的,因为只有 echo
会提升权限,但输出重定向会 运行 作为您的 non-root 用户,因为它是 shell 内置功能,不是外部命令。
有一个名为 tee
的标准工具可以帮助解决这个问题。这种方法常用在运行宁curl
取数据需要喂给root的时候,比如installing debian apt repository configurations and signing keys.
$ whoami
dho
$ whoami | sudo tee whoami.txt >/dev/null
$ ls -la whoami.txt
-rw-r--r-- 1 root root 4 2022-06-03T09:08:22 whoami.txt
所以你可以看到我用我自己的用户启动了 whoami
,但是文件最终是用 root 权限写入的,因为 tee
取代了你原来例子中的输出重定向,是作为 sudo tee
.