私はこのコードを実行しました:
Sudo cat <<EOF | Sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
echo "Hello World"
EOF
ただし、「許可が拒否されました」と表示された場合でも、/ etc /init.dディレクトリで変更を行うにはrootである必要があります。そして、どういうわけか、上記の私のコマンドは機能しません。
これを解決する方法はありますか?
ファイルへのリダイレクトはbashによって処理されます。したがって、Sudoによって付与されたアクセス許可は継承されません。
Rootとしてファイルに書き込むには、Sudo tee
を使用します。
これを試して:
cat | sed -e 's,%,$,g' | Sudo tee /etc/init.d/dropbox << EOF
echo "Hello World"
EOF
二重引用符で囲まれた$,
が解釈される場合があることに注意してください。
あなたは自分自身に永続的な権利を与えることができます# Sudo -s
次に、コマンド(Sudoを実行する必要はありません)を実行して終了します。# exit
編集:
あなたの質問にはUbuntu関連のタグが付いているので、Ubuntu関連の質問をしていると思います。 Suseのような他のディストリビューションでは、を使用することができます# su
の代わりに # Sudo -s
この部分: Sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
cenは次のように表示されます:
Sudo somecommand --put the result of the Sudo command into--> /etc/init.d/dropbox
これと同じように:
ls somedirectory > filename
ls somedirectory --put the result of the ls command into--> filename
これは、ファイルの書き込みがrootとしてではなく、現在のユーザーとして行われることを意味します。
Benoitが答えに示しているように、tee
を使用して解決できます。