- ベストアンサー
debianでsystem関数を動かすには
(localhost):ls {Desktop,Downloads} Desktop: Downloads: (localhost):perl system'ls {Desktop,Downloads}'; __END__ ls: '{Desktop,Downloads}' にアクセスできません: そのようなファイルやディレクトリはありません (localhost):uname -a Linux debian 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>(localhost):ls {Desktop,Downloads} 使用されているシェルがわかりませんが(debianということはbash?) これはシェルが {Desktop,Downloads} を展開してlsに渡しているので実際には $ ls Desktop Downloads と同じです。 対して >system'ls {Desktop,Downloads}'; はperlのsystem関数からlsが呼ばれる際には $ ls '{Desktop,Downloads}' と'{Desktop,Downloads}'で一つのファイル名(ディレクトリ名)としてlsに渡しているので、そのような結果になります。 ワイルドカードとしては、 {Desktop,Downloads} が、そもそも汎用的でないのですがbashが使用可能な環境であれば system 'bash','-c','ls {Desktop,Downloads}'; になるのではないかと思います。
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>debianでsystem関数を動かすには それで動いてるんじゃないですか? perlから、Bashの環境変数が見えてないだけでは? よくPHPでも同じやつで、地雷踏む人は多いですが。 試しに、 ls の後に「フルパス」を書いてみたらどうなりますか? 少なくとも、system関数が動くのか?の切り分けはできるかと。 んま、面倒なら"ls /"だけでもいいんでしょうけど。
補足
任意のフォルダーたくさんあるので パス/{あれ,これ,沢山}て書き方をしたい 出来るだけ汎用的な書き方を知りたいです
お礼
ありがとうございます