• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.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}'; になるのではないかと思います。

not_understand
質問者

お礼

ありがとうございます

その他の回答 (1)

回答No.1

>debianでsystem関数を動かすには それで動いてるんじゃないですか? perlから、Bashの環境変数が見えてないだけでは? よくPHPでも同じやつで、地雷踏む人は多いですが。 試しに、 ls の後に「フルパス」を書いてみたらどうなりますか? 少なくとも、system関数が動くのか?の切り分けはできるかと。 んま、面倒なら"ls /"だけでもいいんでしょうけど。

not_understand
質問者

補足

任意のフォルダーたくさんあるので パス/{あれ,これ,沢山}て書き方をしたい 出来るだけ汎用的な書き方を知りたいです