- - PR -
sudo なぜワイルドカードを使えないの?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-29 10:59
sudoを利用してファイルをfindすると:
sudo -u root find /home/tokugawa/* をタイプすると、ワイルドカードのせいで実行できない。 findや*にかかわらず、cpや?を組み合わせ使っても無駄。 それはsudo本来の性格なのか?改良する術がありませんか? | ||||
|
投稿日時: 2006-05-29 11:48
sudo -u root sh -c "find /home/tokugawa/*"
じゃ駄目なんですかね? _________________ 桃李不言 下自成蹊 | ||||
|
投稿日時: 2006-05-29 12:37
はい、たしかにOKです。助かりました。有難う御座いました。
失礼ですが、sudoの環境など修正を加えたらいかがですか?(たとえば、confの設定など) ソースはもうリリースされたから、環境のほうから着手したらもっと便利です。 | ||||
|
投稿日時: 2006-05-29 12:58
sudo側の問題じゃなく、シェル(shやbash、cshなど)の問題でしょう。 シェルがsudoを含めたこの一連のコマンドを解釈し、 その中でワイルドカードなどを展開します。 その辺の展開処理の動作を変えるためにダブルクォートを使ってるわけで。 展開の動作については各シェルのmanにも書いてあるはず。 シェル側の修正で対応したければすればいいだろうけど、 展開してからシェルに渡したいケースもあるでしょうし、 イレギュラーなことはやらずに 「そうやって渡すもんだ」としておいた方がいいと思います。 _________________ Mattun Microsoft MVP for Directory Services (Oct 2006-Sep 2007) | ||||
|
投稿日時: 2006-05-29 14:43
なぜsudoを含めてワイルドカードを展開できませんか?ダブルクォートを使う理由はまだわかりません。
| ||||
|
投稿日時: 2006-05-29 15:06
こんにちわ.
それは wild card の問題ではなく, 「space が入っているかどうか?」の問題ではありませんか? sudo -u root sh -c "find /home/tokugawa/*" find の後ろに space が入っていますよね. これが引数かどうかを shell が解釈できない, だから「"" で囲ったらどうですか?」ということでは? ※"" で囲えば「一括り」と見做されるので, ※それ全体が引数として解釈される...という意味です. | ||||
|
投稿日時: 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のようにするとワイルドカードを展開できませんか? | ||||
|
投稿日時: 2006-05-29 15:37
何のシェルを使って実行しているのかわかりませんが、
bashなら $ bash -x を実行した後に、各コマンドラインを実行してみて、 どういう風に展開されて実行されているのか確認してみてください。 で、その際の理屈がシェルの展開処理だ、というのはすでに 言ってみてるんですが、その辺は調べてみましたか? 細かい展開の仕組みを説明すればわかってもらえるかもしれないけど、 書くとしてもシェルのmanに書かれてるのを書き直すようなもんですから、 できれば調べてみてもらった方がいいですし。 |