2011-01-29 4 views
1

私は展開スクリプトを書いていると奇妙な問題にして実行している...その後バッシュ展開スクリプトのアクセス許可の問題

[email protected]:~$ sudo echo "Build: "$REVISION" - Deployed: "$(date +%Y-%m-%d) > /home/www/prod/www/revision.html 
-bash: /home/www/prod/www/revision.html: Permission denied 

けど...

[email protected]:~# echo "Build: "$REVISION" - Deployed: "$(date +%Y-%m-%d) > /home/www/prod/www/revision.html 
[email protected]:~# more /home/www/prod/www/revision.html 
Build: - Deployed: 2011-01-28 

...

[email protected]:~$ sudo ls -l /home/www/prod/www 
total 28 
-rw-r--r-- 1 root  root  31 2011-01-28 21:56 revision.html 

[email protected]:~$ sudo more /home/www/prod/www/revision.html 
Build: - Deployed: 2011-01-28 

どのような取引ですか?

答えて

2

echoはルートとして実行されますが、リダイレクトは実行されません。 sudoサブシェルでリダイレクションを実行します。

+0

私はそれをどのように行うのでしょうか? – Ian

+1

'sudo bash -c" ... "' –

3

それを行うための通常の方法は、teeである:

echo "foo" | sudo tee filename 

あなたはこのようにしtee画面への出力を抑制することができる。

echo "foo" | sudo tee filename >/dev/null 
+0

これは本当に普通の方法ですか?私は一般的に 'sudo sh -c 'を実行します。 –

+0

@KeithThompson:どちらの方法でも、パイプラインを使用する利点は、' sudo tee'を簡単に末尾に追加できることです。既存のパイプラインを使用して、stdoutに再度出力するかどうかを選択できます。 –

+0

または 'sudo dd of = filename'です。 – v7d8dpo4

関連する問題