没有 bash -c 的 sudo echo 有哪些替代方法

what alternative methods for sudo echo without bash -c

我必须 运行 脚本 my.sh 中的 echosudo 因为许可。 我不想用 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.

发布