Bash ワイルドカード構成

Bash ワイルドカード構成

cygwinで戻ってみると、Ubuntu 10.4でbash(バージョン4.1.5)を使用するのは非常に混乱しています。私は2つの可能性のうちの1つが好きです。

  • 他のすべてを無視して.一致..させます。
  • 明示的に指定しない限り、ドットで始まるファイル名を無視します。

現在の動作は奇妙です。

cd; ls .*

ドットで始まるファイル名を明示的に要求しましたが、「ls:can access .*:No such file or Directory」と表示されます。

cd; ls .gnupg/*.gpg

また、ドットで始まらないファイルを要求すると文句を言います(ただし、ドットで始まるディレクトリ名だけです)。

出力shopt -p

(削除済み)

解決策

この問題が発生していない他のユーザーの値に値を変更しましたが、shopt役に立ちませんでした。それから私を2つに分け、次のようなものを.bashrc含む問題のある行を見つけるというアイデアを思いつきましたGLOBIGNORE='.[!/.]*:..[!/]*:*/.[!/.]*:*/..[!/]*:

私はこれをこれに置き換えて、GLOBIGNORE='.:..'それは私が望むものとほぼ動作します。

答え1

残念ながら、私は自分の質問に答えなければなりません。それはGLOBIGNORE。マニュアルページから:

パス名拡張時に無視されるファイル名のセットを定義するコロンで区切られたパターンのリスト。パス名拡張パターンに一致するファイル名が GLOBIGNORE のパターンの 1 つとも一致する場合は、一致リストから削除されます。

答え2

"ls:アクセスできません。*:そのファイルまたはディレクトリはありません。"エラーは、現在ディレクトリに権限の問題があるように聞こえます。以下を使用して再現できます。

$ mkdir -p ~/tmp/tmp
$ cd ~/tmp/tmp
$ ls .*
.:

..:
tmp
$ chmod u-r .
$ ls .*
ls: cannot access .*: No such file or directory
$ ls -ldn .
d-wxr-xr-x 2 1000 1000 4096 2012-03-12 18:31 .
$ chmod u+r .
$ ls .*
.:

..:
tmp

chmod +r .走って再試行することをお勧めしますls .*

答え3

ファイルに一致するglobがない可能性があります。一致するファイルがない場合、bashデフォルトは*文字通り解釈することです。これを防ぐためにnullglobusingを設定することもできますshopt -s nullglob(ただし、一致するファイルがないと、コマンドにパラメータが完全にありません)。

関連情報