问题描述
我想要一个脚本来为我的 .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'