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



因为有权限,我必须在脚本my.sh中使用sudo运行echo。我不想用sudo my.sh执行脚本。我不想使用bash -c "...",因为转义。

没有其他解决方案吗?

my.sh

#!/usr/bin/bash
>/file.tmp 
echo '
a="S T"
z=abc
'

您在这里遇到的问题是输出重定向>/file.tmp必须在具有更高权限的情况下发生。这意味着您要么必须像启动sudo my.sh那样启动脚本,要么以赋予其更高权限的方式执行重定向。仅仅运行sudo echo是不够的,因为只有echo具有提升的权限,但是输出重定向将作为非root用户运行,因为它是shell内置功能,而不是外部命令。

有一个叫做tee的标准工具可以帮助你做到这一点。这种方法通常用于运行curl获取需要提供给root的数据,例如安装debian apt存储库配置和签名密钥。

$ 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启动的。

最新更新