zshのワイルドカード展開について

このQ&Aのポイント
  • zshのワイルドカード展開について初歩的な質問ですが、ホームディレクトリの親ディレクトリ内に作成したファイルをlsコマンドで表示しようとすると、エラーが表示されます。
  • zshrcの設定を確認しても展開されないため、zshのワイルドカード展開方法が特殊な可能性があります。
  • 他のシェルではワイルドカードが展開される一方、zshではワイルドカード展開がうまく機能しない問題が発生します。
回答を見る
  • ベストアンサー

zshのワイルドカード展開について

zshのワイルドカード展開について、初歩的な質問ですがよろしくお願いします。 ホームディレクトリの親ディレクトリ内に、"test1.txt"と"test2.txt"というファイルを作った上で、  > files=~/../te*.txt  > ls $files とやると  ls: ..../te*.txtにアクセスできません。 No such file or directory とエラー表示されてしまいます。 zshrcの設定が影響しているのかと思い、zshrcを一旦カラにしてみましたが、 結果は同じでした。 bash等だと、  > ls $files でワイルドカードが展開され、  test1.txt test2.txt と表示されるのですが、zshの場合はワイルドカードを展開させる方法が特殊なのでしょうか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

zshは、変数への代入の右辺では、ファイル名展開が行われないようですね。 何かオプションが無いかと、man zshexpn を見てみましたが、よくわかりません。 とりあえずでよければ、 files=$(echo ~/../te*.txt)

jshannon9
質問者

お礼

ご回答ありがとうございました。 デフォルトだと、やはりファイル名展開がされないようですね。 最適な方法かは分からないのですが、一応自己解決しましたので、 補足に追記させていただきます。 最後までご回答ありがとうございました。

jshannon9
質問者

補足

> setopt GLOB_SUBST をzshrc、もしくはzsrenvに追記することで、ワイルドカードが展開されるようです。 ホームディレクトを/home/user1/として、 > file=~/../te*.txt > echo $file /home/user1/../test1.txt /home/user1/../test2.txt > ls $file /home/user1/../test1.txt /home/user1/../test2.txt となり、エラーが表示されなくなりました。 スクリプトとして利用することもあるので、 私の場合は.zshenvの方に上記"setopt GLOB_SUBST"を追記することにしました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

今、動作確認できないのですが。  > files=~/../te*.txt このあと、 echo $files したらどうなります? 念のため。 ファイル名展開は、files=の時点で行われます。lsは、その展開されたファイル名一覧を引数にもらうだけで、*等の展開は行いません そのエラーメッセージからすると、zshでは echo $files でその入力されたままの~/../te*.txt が出力されると思います。

jshannon9
質問者

お礼

ご回答ありがとうございます。 補足に間違いがありました。失礼しました。 .zshrc内の2行目 compinit -u は1行目と重複しているので不必要でした。

jshannon9
質問者

補足

ご回答ありがとうございます。 ホームディレクトリを/home/user1として > files=~/../te*.txt > echo $files  /home/user1/../te*.txt と表示されます。 ご指摘いただいたとおり、files=の時点のファイル名展開がなっていないようなのですが、 これはなにが原因なのでしょうか? 私の.zshrcで補完に関する部分の記述は、以下のようなものです。 (.zshrcを消去してデフォルト状態に戻しても同じなので、原因がここにはなさそうなのですが) ========================================== autoload -U compinit; compinit -u compinit -u setopt list_packed # 補完リストを詰めて表示 setopt extended_glob # 拡張補完機能 bindkey "^[[Z" reverse-menu-complete # Shift-Tabで補完候補を逆順でたどる setopt nonomatch compdef _files zsh "*.zsh" zstyle ':completion:*:vim:*' ignored-patterns '*?.o' '*?~' '*.exe' '*\#' ===========================================

関連するQ&A

  • zshで圧縮ファイルが赤く表示されません。

    基本的なシェルの質問です。 tcshからzshに変更して色々.zshrcをいじくってみたんですが、tcshやbashではターミナル上で ls をしたらディレクトリは青、実行ファイルは緑、リンクは水、圧縮ファイルは赤、などなど色とりどりだったのですが、zshでは圧縮ファイルが赤く表示されません。ディレクトリは青く表示されるのでが。。。(そういえばjpgファイルとかに付いていた紫色も見当たらないです。) .zshrc 内で alias ls="ls -F --color=auto" と入力しているのですが、これ以外に何かしなくてはいけないのでしょうか?

  • zshで名前に半角スペースを含むファイルの削除

    test space.txt という名前のファイルを削除したい時 aaa="test space.txt" rm $(echo ${aaa}|awk '{print "\""$0"\""}') とやってダブルクォートでくくっても、 rm: "test: No such file or directory rm: space.txt": No such file or directory となって、"test と space.txt" で分かれてしまいます。 どうすれば良いのでしょうか>< zshです

  • zshのtab補完について

    よろしくお願いします。 つい最近、tcshからzshに乗り換えて、設定をいろいろいじっているのですが、 Tabキーによる補完の動作で、デフォルト(?)だと使いづらいものがあり、 なんとかしたいのですが、設定方法がわからず困っています。 ご助言をお願い致します。 変更したいのは以下の2点の動作です。 ========================================================= (1) "./"に続く補完で、実行権限なしのファイルも補完候補にしたい。 ========================================================= > ls -l -rwxrwxrwx+ 1 username main.sh -rw-r--r--+ 1 username main2.sh > ./ma(ここでTabキー) 上記のようにtabキーを押すと、補完候補には実行権限のあるmain.shしか表示されず、 実行権限なしのmain2.shが候補になりません。 > chmod a+x main2.sh のように実行権限を付け直ければいいのですが、何度もやるのはさすがに面倒なので、 実行権限なしのファイルも補完候補になるようにzshで設定したいのです。 =============================================== (2) $PATHにある実行ファイルを補完候補にしない。 =============================================== > ls main.sh > sh ma(ここでTabキー) mac2unix make.exe makejvf manlint ......... main.sh ...... make makeinfo.exe ... 上記のように、例えばshコマンドに続く補完候補には、 当然のようにカレントディレクトリ内のファイルが来ると思っていたのですが、 $PATHにあるようなコマンドまで補完候補になってしまいます。 これはコマンドごとに補完候補を除外するしかないのでしょうか? 以上2点が困っている点なのですが、解決方法かもしくはヒントでも結構ですので、 ご教授お願いします。 --------------------------------------------------------------- (私の.zshrcに設定してある内容で、補完に関する項目は以下の内容です。) autoload -U compinit; compinit -u setopt list_packed compdef _files zsh "*.zsh" zstyle ':completion:*:vim:*' ignored-patterns '*?.o' '*?~' ---------------------------------------------------------------

  • cygwinをインストールしたところエラーメッセージがでてきてしまいました。

    こんなメッセージです。 mkdir: cannot create directory `': No such file or directory Copying skeleton files. These files are for the user to personalise their cygwin experience. These will never be overwritten. `./.bashrc' -> `//.bashrc' /usr/bin/install: cannot create regular file `//.bashrc': No such file or direct ory `./.bash_profile' -> `//.bash_profile' /usr/bin/install: cannot create regular file `//.bash_profile': No such file or directory `./.inputrc' -> `//.inputrc' /usr/bin/install: cannot create regular file `//.inputrc': No such file or direc tory 問題なく使える?みたいですけどどうすれば直るでしょうか?ちなみに一度インストールしたところgcc: command not foundとでてコンパイラができなかったので参考書についていたcygwinをインストールしたところこのメッセージがでてきてしまいました。(コンパイラはできるようになりました。)

  • 絶対パスでアーカイブされたファイルをtarコマンドの相対パスで展開

    UNIXコマンドの「tarコマンド」についての質問です。 ファイルを絶対パスを用いてアーカイブをかけた場合、アーカイブファイルの展開時に、絶対パスで展開させず相対パスで展開させる方法がわかりません。 test.logを絶対パスを用いてアーカイブします。 %pwd /export/home %ls test.log %tar -cvf test.tar /export/home/test.log %ls test.log test.tar %rm test.log %ls test.tar このアーカイブファイルを別ディレクトリに移動 %mv /export/home/test.tar /export/home/test/test.tar 自身もディレクトリ移動 %cd /export/home/test %ls test.tar このような条件でアーカイブファイルの展開を実行 %tar -xvf test.tar %ls test.tar /export/home/testのディレクトリでは展開されず下記のように 絶対パスで指定したディレクトリに展開されます。 %cd /export/home/test %ls test.log インターネットで調べたところ %tar -xvf test.tar -C /export/home/test で実行すれば相対パスで展開できると記述があったのですが うまくできませんでした。 上記のコマンドで実行したところ得にはエラーは出ず メッセージが「tar:ブロックサイズ=4」と出て展開もされませんでした。 もしよろしければご教示願えませんでしょうか。 よろしくお願いいたします。

  • シェルプログラミングでスペースを含むパスの扱い方

    シェルプログラミングでスペースを含むパスの扱い方 まだあまり意味のないプログラムですが以下のプログラムを書きました。(以下program.sh) sh program.sh "C:\Program Files\Af\afx17" "*.pdf" といった感じでスペースがあるパスと探すファイルの拡張子をprogram.shに渡します。 \を/に変えて””でくくりました。しかし以下のエラーがでてうまくできませんでした。 find: `"c:/Proram': No such file or directory find: `Files/Af/afx17/"': No such file or directory " "(スペース)を"\ "(バックスラッシュとスペース)に変えて””でくくってもやっぱりだめでした。 findl: `"c:/Proram\\': No such file or directory findl: `Files/Af/afx17/"': No such file or directory 直接find $1 -name $2としてもだめでした。 findl: `c:\\Proram': No such file or directory findl: `Files\\Af\\afx17': No such file or directory 色々試しましたがどうやってもうまくいきません。何がいけないのでしょうか?

  • Macの(ターミナル)Terminal.appでz

    Macの(ターミナル)Terminal.appでzshのlsカラーをsolarized化したい ・solarizedをダウンロード $ git clone https://github.com/tomislav/osx-terminal.app-colors-solarized solarized.git ・ターミナルで設定 ・glsとかをインストール $ brew install coreutils ・Solarized のディレクトリカラー設定ファイルを任意の場所へダウンロード $ git clone https://github.com/seebi/dircolors-solarized.git ~/dircolors-solarized ・lsコマンドをglsに置き換え、gdircolorsでdircolors-solarizedを読み込むように設定 $ vim ~/.zsh_profile alias ls=’gls --color=auto’ eval $(gdircolors ~/.dircolors-solarized) ※参考サイト Mac Terminal のカラー設定をSolarized にする - Qiita http://qiita.com/Humangas/items/848f0318dfc3c6f5b8e2 -- まったく同じ手順で .bash_profile のところを .zsh_profile でやりました .zsh_profileには上述した2行のみ記載されている状態です .zshrcは何も記述していない状態です 以上です zshの場合にlsカラーをsolarized化する方法を教えていただけませんか?

  • ディレクトリ内のファイル名の一括変更できませんか?

    同じディレクトリにある test-sum.txt test-average.txt test-deviation.txt ... というファイルの名前を my-sum.dat my-average.dat my-deviation.dat ... と一括変更したいのですが、bash で可能でしょうか? よろしくお願いします!! ワイルドカード * の扱いが Windows のコマンドプロンプトと違うみたいで、とまどっています。。

  • CygwinでNo such file

    C言語をコンパイルしたくてCygwinをダウンロードしたのですが、ドキュメントにCgengoというファイルを作ってその中にコンパイルしたいメモ帳を入れて、 $cd $cd Cgengo と入力したところ、 -bash: cd: Cgengo: No such file or directory と出て移動できませんでした。ちなみに$cdのあとに$lsを入力しても何も出てきませんでした。 どういった原因が考えられるでしょうか。どなたか教えてください。お願いします。

  • Cygwinでコンパイルできません。

    CygwinをすべてDefaultでインストールしました。 テキストエディタとしてTeraPadを利用しています。 テラパッドでtest.cというファイルをつくり、 gcc -o test test.c でコンパイルしたのですが gcc:test.c:No such file or directory gcc:no input files と表示されます。 正常にコンパイルするにはどうしたらいいのでしょうか? 自分はC言語について勉強したばかりでくわしくないので、この質問を書いていて言葉足らずなところがあり説明不十分かもしれませんが、よろしくお願いします。