因为有权限,我必须在脚本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
启动的。