お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-06-16 11:44:22

horm
メンバ
登録日: 2009-02-20

sudoでリダイレクトしたらファイルが空になりました

下記の結果、/etc/profile は空になってしまいます。

$ sudo cp -v /etc/profile /etc/profile.orig
$ sudo bash -c "sed -e 's/umask 002$/umask 022/' /etc/profile > /etc/profile"
$ cat /etc/profile

どうして置換後のテキストが書き込まれないのでしょうか?

オフライン

 

#2 2010-06-16 12:00:37

hmatsue
アドバイザ
登録日: 2009-03-10

Re: sudoでリダイレクトしたらファイルが空になりました

horm による投稿:

$ sudo bash -c "sed -e 's/umask 002$/umask 022/' /etc/profile > /etc/profile"

だと、前半部分だけroot権限で実行され、/etc/profileに出力する部分が一般ユーザ権限となり書き込みできません。

コード:

$ sed -e 's/umask 002$/umask 022/' /etc/profile | sudo tee /etc/profile

のように実行して下さい。

オフライン

 

#3 2010-06-16 12:13:00

hmatsue
アドバイザ
登録日: 2009-03-10

Re: sudoでリダイレクトしたらファイルが空になりました

hmatsue による投稿:

horm による投稿:

$ sudo bash -c "sed -e 's/umask 002$/umask 022/' /etc/profile > /etc/profile"

だと、前半部分だけroot権限で実行され、/etc/profileに出力する部分が一般ユーザ権限となり書き込みできません。

ごめんなさい。上記は勘違いっぽいです。ダブルクォートで囲まれているのを見落としていました。sedスクリプトだけ実行しても出力無しになっていたりしないでしょうか。

オフライン

 

#4 2010-06-16 12:17:05

weyk
メンバ
登録日: 2009-04-03

Re: sudoでリダイレクトしたらファイルが空になりました

ファイルが同一だから ということはないでしょうか?
リダイレクトによって、(sudoで実行されているbashによって)空にされてしまいませんか?(事前準備として)
# その後、sedにより参照されても、既に空。

オフライン

 

#5 2010-06-16 12:17:14

hmatsue
アドバイザ
登録日: 2009-03-10

Re: sudoでリダイレクトしたらファイルが空になりました

度々で申し訳ありません。
リダイレクト先のファイルが先に開かれてしまい、sedが空のファイルを読み込み空の出力を出したためと思われます。

オフライン

 

#6 2010-06-16 12:45:34

horm
メンバ
登録日: 2009-02-20

Re: sudoでリダイレクトしたらファイルが空になりました

hmatsue様
weyks様
ありがとうございます。

おっしゃるとおり、sudoとは関係ありませんでした。

echo "abc" > source
sed -e "s/b/ ok /" source
#=> a ok c
sed -e "s/b/ ok /" source > source
cat source
#=> 空

sed の-iオプションでOKでした。
sudo bash -c "sed -i 's/umask 002$/umask 022/' /etc/profile"

お手数をおかけしてすみませんでした。m(_ _)m

オフライン

 

Board footer

Powered by FluxBB