如何解决如何使用 sudo 简单地将包含 $HOME 的文本重定向到 /etc/zshenv?
我想要一个脚本来为我的 .zshrc
文件设置一个更好(但非默认)的位置:
% sudo echo "ZDOTDIR=$HOME/.config/zsh" >> /etc/zshenv
但这失败了:
zsh: permission denied: /etc/zshenv
该问题与首先进行的重定向有关,但没有明显的方法可以解决此问题。我可以听到您说“使用 zsh -c
”,但失败了:
sudo zsh -c 'echo "ZDOTDIR=$HOME/.config/zsh" >> /etc/zshenv'
导致 $HOME
在用 sudo
启动的 shell 内被评估,所以我的 /etc/zshenv
文件包含
ZDOTDIR=/var/root/.config/zsh
相信我:我的主目录不是 /var/root
。
我试过 --preserve-env
但没有用:
sudo --preserve-env zsh -c 'echo "ZDOTDIR=$HOME/.config/zsh" >> /etc/zshenv'
显然我可以找到一种解决方法,例如将 $HOME 保存到脚本中的局部变量,但似乎必须有一种更直接、更简单和直接的方法来做到这一点。
解决方法
我刚刚意识到我在想这个问题全错了。我想防止 $HOME
被评估。当然,在单引号内转义单引号是一种新的 PITA,但它是:
sudo zsh -c 'echo '"'"'ZDOTDIR=$HOME/.config/zsh'"'"' >> /etc/zshenv'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。