如何使用 bash 写入 /etc/profile | 没有权限

Jav*_*las 5 permissions bash environment ubuntu

我正在创建一个 bash 脚本来设置 Ubuntu 16.04 lts 操作系统来下载、安装和其他东西,而无需单独介绍每个命令,我必须在 /etc/profile 文件中写入以添加 PATH 环境变量。当我的代码进入该行时,它会显示“权限被拒绝”消息,这就是我所拥有的:

sudo echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
bash: /etc/profile: Permission denied
Run Code Online (Sandbox Code Playgroud)

你知道我怎么能解决这个问题吗?

lar*_*sks 12

Shell i/o 重定向发生shell 执行您的命令之前……换句话说,当您编写:

sudo somecommand >> /etc/profile
Run Code Online (Sandbox Code Playgroud)

>> /etc/profile部分作为当前用户执行,而不是作为root. 这就是您收到“权限被拒绝”消息的原因。有多种方法可以解决这个问题。你可以运行:

sudo sh -c "echo export PATH=$PATH:/usr/local/go/bin >> /etc/profile"
Run Code Online (Sandbox Code Playgroud)

或者,您可以利用命令的 append ( -a) 标志tee

echo "export PATH=$PATH:/usr/local/go/bin" | sudo tee -a /etc/profile
Run Code Online (Sandbox Code Playgroud)

  • 这里还有另一个问题——因为`$PATH` 是双引号,它将被当前的shell 替换,而不是按字面意思存储在配置文件中。它需要在单引号中或转义(如果您使用 `sh -c` 选项,它需要由 *two* 引号/转义层保护)。 (2认同)