sudo cat << EOF> File doesn't work, sudo su does

前端 未结 5 1662
南笙
南笙 2020-12-23 09:23

I tried the following on the command prompt in bash:

sudo cat << EOF > /etc/yum.repos.d/some-name.repo
#Content
#....
#...
EOF

It

相关标签:
5条回答
  • 2020-12-23 09:55

    if you are using ' inside the text then you may use:

    $ 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
    "
    

    this is tested on google cloud's virtual server centos 7.0

    0 讨论(0)
  • 2020-12-23 09:57

    Another option is tee.

    cat << EOF | sudo tee -a /etc/yum.repos.d/some-name.repo
    ...
    EOF
    
    0 讨论(0)
  • 2020-12-23 09:58

    As others have pointed out the shell redirection is done by the current shell not by cat. sudo only changes the permission of the program that is executed not of the shell doing the redirect. My solution to this is to avoid the redirect:

    sudo dd of=/etc/yum.repos.d/some-name.repo << EOF
    
    0 讨论(0)
  • 2020-12-23 10:00

    As a variation to @Yuriy Nazarov's answer, only the piped output needs to be elevated thru sudo. The piped input can stay un-elevated:

    sudo bash -c 'cat > /etc/yum.repos.d/some-name.repo' << EOF
    line1
    line2
    line3
    EOF
    

    This means a much smaller portion of the command needs to be quoted and sent thru to sudo.

    0 讨论(0)
  • 2020-12-23 10:08

    Output redirection (e.g., >) is performed by bash, not by cat, while running with your UID. To run with root's UID use sudo:

    sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
    line1
    line2
    line3
    EOF'
    
    0 讨论(0)
提交回复
热议问题