
Ubuntu日本語フォーラム

ログインしていません。
下記の結果、/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
どうして置換後のテキストが書き込まれないのでしょうか?
オフライン
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
のように実行して下さい。
オフライン
hmatsue による投稿:
horm による投稿:
$ sudo bash -c "sed -e 's/umask 002$/umask 022/' /etc/profile > /etc/profile"
だと、前半部分だけroot権限で実行され、/etc/profileに出力する部分が一般ユーザ権限となり書き込みできません。
ごめんなさい。上記は勘違いっぽいです。ダブルクォートで囲まれているのを見落としていました。sedスクリプトだけ実行しても出力無しになっていたりしないでしょうか。
オフライン
ファイルが同一だから ということはないでしょうか?
リダイレクトによって、(sudoで実行されているbashによって)空にされてしまいませんか?(事前準備として)
# その後、sedにより参照されても、既に空。
オフライン
度々で申し訳ありません。
リダイレクト先のファイルが先に開かれてしまい、sedが空のファイルを読み込み空の出力を出したためと思われます。
オフライン
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
オフライン