微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 sudo 简单地将包含 $HOME 的文本重定向到 /etc/zshenv?

如何解决如何使用 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 举报,一经查实,本站将立刻删除。