- PR -

sudo なぜワイルドカードを使えないの?

投稿者投稿内容
江戸の子
常連さん
会議室デビュー日: 2005/09/05
投稿数: 23
お住まい・勤務地: 静岡
投稿日時: 2006-05-29 10:59
sudoを利用してファイルをfindすると:
sudo -u root find /home/tokugawa/*
をタイプすると、ワイルドカードのせいで実行できない。
findや*にかかわらず、cpや?を組み合わせ使っても無駄。
それはsudo本来の性格なのか?改良する術がありませんか?
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2006-05-29 11:48
sudo -u root sh -c "find /home/tokugawa/*"

じゃ駄目なんですかね?
_________________
桃李不言 下自成蹊
江戸の子
常連さん
会議室デビュー日: 2005/09/05
投稿数: 23
お住まい・勤務地: 静岡
投稿日時: 2006-05-29 12:37
はい、たしかにOKです。助かりました。有難う御座いました。
失礼ですが、sudoの環境など修正を加えたらいかがですか?(たとえば、confの設定など)
ソースはもうリリースされたから、環境のほうから着手したらもっと便利です。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2006-05-29 12:58
引用:

失礼ですが、sudoの環境など修正を加えたらいかがですか?(たとえば、confの設定など)
ソースはもうリリースされたから、環境のほうから着手したらもっと便利です。


sudo側の問題じゃなく、シェル(shやbash、cshなど)の問題でしょう。
シェルがsudoを含めたこの一連のコマンドを解釈し、
その中でワイルドカードなどを展開します。
その辺の展開処理の動作を変えるためにダブルクォートを使ってるわけで。
展開の動作については各シェルのmanにも書いてあるはず。

シェル側の修正で対応したければすればいいだろうけど、
展開してからシェルに渡したいケースもあるでしょうし、
イレギュラーなことはやらずに
「そうやって渡すもんだ」としておいた方がいいと思います。
_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
江戸の子
常連さん
会議室デビュー日: 2005/09/05
投稿数: 23
お住まい・勤務地: 静岡
投稿日時: 2006-05-29 14:43
なぜsudoを含めてワイルドカードを展開できませんか?ダブルクォートを使う理由はまだわかりません。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2006-05-29 15:06
こんにちわ.
引用:

江戸の子さんの書き込み (2006-05-29 14:43) より:

なぜsudoを含めてワイルドカードを展開できませんか?ダブルクォートを使う理由はまだわかりません。


それは wild card の問題ではなく,
「space が入っているかどうか?」の問題ではありませんか?

sudo -u root sh -c "find /home/tokugawa/*"

find の後ろに space が入っていますよね.
これが引数かどうかを shell が解釈できない,
だから「"" で囲ったらどうですか?」ということでは?
※"" で囲えば「一括り」と見做されるので,
※それ全体が引数として解釈される...という意味です.
江戸の子
常連さん
会議室デビュー日: 2005/09/05
投稿数: 23
お住まい・勤務地: 静岡
投稿日時: 2006-05-29 15:27
こんにちは。
わたしの質問をまとめておきます:
-----------------------------
@rootユーザでログインして
find /home/tokugawa/*/test
OKです。
-----------------------------
A別のユーザでログインしてから、もちろんsudoを利用します
sudo find /home/tokugawa/1/test
OKです。
-----------------------------
Bしかし、ワイルドカードをつければ
sudo find /home/tokugawa/*/test
can not find...駄目
-----------------------------
A番目がOK以上、spaceの問題ではありませんと思います。sudo "find /home/tokugawa/*/test"も駄目です。
sudo sh -c "find /home/tokugawa/*/test" は確かに役に立ちました。しかし、なぜBのようにするとワイルドカードを展開できませんか?
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2006-05-29 15:37
何のシェルを使って実行しているのかわかりませんが、
bashなら
$ bash -x
を実行した後に、各コマンドラインを実行してみて、
どういう風に展開されて実行されているのか確認してみてください。

で、その際の理屈がシェルの展開処理だ、というのはすでに
言ってみてるんですが、その辺は調べてみましたか?
細かい展開の仕組みを説明すればわかってもらえるかもしれないけど、
書くとしてもシェルのmanに書かれてるのを書き直すようなもんですから、
できれば調べてみてもらった方がいいですし。

スキルアップ/キャリアアップ(JOB@IT)