我在bash的命令提示符下尝试了以下内容:
sudo cat << EOF > /etc/yum.repos.d/some-name.repo
#Content
#....
#...
EOF
Run Code Online (Sandbox Code Playgroud)
它抱怨说:
-bash: /etc/yum.repos.d/some-name.repo: Permission denied
Run Code Online (Sandbox Code Playgroud)
然后我做了sudo su
并尝试了除了sudo
之前的完全相同的东西cat
,它没有任何问题.上面我错过了什么?
Yur*_*rov 71
输出重定向(例如,>)由bash执行,而不是由cat执行,同时使用您的UID运行.要使用root的UID运行,请使用sudo:
sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
Run Code Online (Sandbox Code Playgroud)
小智 29
另一个选择是发球台.
cat << EOF | sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF
Run Code Online (Sandbox Code Playgroud)
Ste*_*uan 18
作为@Yuriy Nazarov答案的变体,只有管道输出需要通过提升sudo
.管道输入可以保持不升高:
sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
line1
line2
line3
EOF
Run Code Online (Sandbox Code Playgroud)
这意味着命令的一小部分需要引用并发送到sudo
.
小智 11
正如其他人所指出的那样,shell重定向是由当前的shell而不是cat完成的.sudo只更改执行重定向的shell执行的程序的权限.我的解决方案是避免重定向:
sudo dd of=/etc/yum.repos.d/some-name.repo << EOF
Run Code Online (Sandbox Code Playgroud)
如果您在文本中使用 ' 那么您可以使用:
$ sudo bash -c "cat > /etc/postfix/mysql-virtual_forwardings.cf << EOF
user = mail_admin
password = password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
EOF
"
Run Code Online (Sandbox Code Playgroud)
这是在谷歌云的虚拟服务器centos 7.0上测试的
归档时间: |
|
查看次数: |
30179 次 |
最近记录: |