每次更新 Vivaldi 时,我都必须运行这个 sed 命令来应用 custom.css
sudo sed -i '1s/^/@import "custom.css";/' /opt/vivaldi-snapshot/resources/vivaldi/style/common.css
现在该命令在终端中运行良好,但当我尝试通过在 ~/.bash_aliases 中创建别名甚至通过 bash 脚本(放置在 /bin/ 中并具有可执行权限)来运行它时却不行。我确实尝试对“custom.css”使用完整路径,但它仍然没有用。谢谢。
编辑:
(1) 通过别名:
alias vivupdate="sed -i '1s/^/@import "custom.css";/' /opt/vivaldi-snapshot/resources/vivaldi/style/common.css"
当我尝试运行时,出现此错误:
$ sudo vivupdate
[sudo] password for admn:
sudo: vivupdate: command not found
$
(2) 通过 Bash 脚本:
#!/bin/bash
sed -i '1s/^/@import "custom.css";/' /opt/vivaldi-snapshot/resources/vivaldi/style/common.css
创建 vivupdate.sh,使其可执行并将其放在 /bin/ 中。
然后编辑 sudoers 文件并添加:
user ALL=(ALL:ALL) NOPASSWD:/bin/vivupdate.sh
但是当我在终端中运行脚本时,我得到了这个错误:
sed: couldn't open temporary file /opt/vivaldi-snapshot/resources/vivaldi/style/sedCIt48u: Permission denied
别名不可用于
sudo
。它们特定于您的 shell 和用户,并sudo
以 root 身份运行命令。因此,如果您需要以 root 身份运行别名,则需要sudo
在别名定义本身中包含 。此外,您在那里的别名上引用错误,所以它无论如何都行不通。你想要的是:请注意我是如何转义内部双引号 (
\"
) 的。否则,由于您使用双引号定义别名,因此第二个双引号(之前的那个"custom.css
)将表示结束。脚本的问题在于
sed -i
行为方式。虽然它看起来是在编辑原始文件,但实际发生的是它将编辑后的文件保存为临时副本,然后将文件重命名为原始文件。但是,由于您没有使用 运行它sudo
,因此您没有这样做的权限。您添加到sudoers
文件中的行仅意味着您可以在sudo vivupdate.sh
没有密码的情况下运行。但是,您仍然需要将其作为sudo
.将命令添加到 是不够的
sudoers
,您仍然需要使用以下命令调用它sudo
: