77

bashのコマンドプロンプトで次のことを試しました:

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

それは不平を言った:

-bash: /etc/yum.repos.d/some-name.repo: Permission denied

次に、 beforesudo suを除いてまったく同じことを試してみましたが、問題なく動作しました。上記で何が欠けていますか?sudocat

4

5 に答える 5

115

UID を使用して実行している場合、出力のリダイレクト (> など) は cat ではなく bash によって実行されます。root の UID で実行するには、sudo を使用します。

sudo bash -c 'cat << EOF > /etc/yum.repos.d/some-name.repo
line1
line2
line3
EOF'
于 2013-09-16T20:40:27.587 に答える
55

別のオプションはティーです。

cat << EOF | sudo tee -a /etc/yum.repos.d/some-name.repo
...
EOF
于 2013-12-23T22:56:47.127 に答える
31

@Yuriy Nazarovの回答のバリエーションとして、パイプされた出力のみを昇格させる必要がありますsudo。パイプされた入力は、昇格されないままにすることができます。

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

これは、コマンドのごく一部を引用して に送信する必要があることを意味しsudoます。

于 2015-02-06T04:06:44.623 に答える
12

他の人が指摘しているように、シェルのリダイレクトは cat ではなく現在のシェルによって行われます。sudo は、リダイレクトを行うシェルではなく、実行されるプログラムの許可のみを変更します。これに対する私の解決策は、リダイレクトを避けることです:

sudo dd of=/etc/yum.repos.d/some-name.repo << EOF
于 2013-11-20T16:46:05.870 に答える