web-dev-qa-db-ja.com

Bashコマンドラインで*を展開する方法

ls *と入力すると、現在のファイルにabcが直接含まれている場合、実際にはls a b cに展開されます。

Enterキーを押す前に、これを拡張する方法があるかどうか疑問に思っていました。 Ctrl + X のしくみ、または tab complete のしくみに似ています。

自分を明確にするために

$ ls *
<press magic key>
$ ls a b c

同様に:

$ ls ~/
<press tab>
$ ls /home/username

私は以前にこれを見たと思ったが、私は間違っていたかもしれない。

35
bramp

bashから、glob-expand-Word関数を使用できます。

単語の前の単語はパス名のパターンとして扱われます
展開され、一致するファイル名のリストが挿入されます。
単語を置き換えます。数値引数が指定されている場合、パス名展開の前に
アスタリスクが追加されます。

このようなものを~/.inputrcに追加します。

Control-x: glob-expand-Word

$ ls *の後に Ctrl-X あなたの例では、$ ls a b cに展開されます。

20
cYrus

Bashでは、readline機能はglob-expand-Wordと呼ばれ、 CtrlX* デフォルトでは。

viモード(set -o vi)、「マジックキー」は Esc*。これはbashkshの両方で機能します。

11
jlliagre
 $ bind -q glob-expand-Word 
 glob-expand-Wordは、「\ Cx *」を介して呼び出すことができます。
 
 $ bind -q insert-補完
挿入補完は、「\ e *」を介して呼び出すことができます。

これらを使用するには、次のことができます

ls * Ctrl+x*

または

ls * Esc*

Enterキーを押す前に複雑な行を展開します

4
Steven Penny

Glob-expand-Word(\ C-x *)の代わりに、挿入補完(\ e *)があります。最後にアスタリスクがなくても機能しますが、隠しファイルなどの他の補完機能も含まれます。 〜/ .inputrcの両方にリバウンドしました:

# insert glob results (\C-x* by default)
"\C-g": glob-expand-Word

# insert completion list (\e* by default)
"\ei": insert-completions

glob-complete-Word(\ eg)を使用して、たとえば/System/Library/Launch*/*Finder/System/Library/LaunchAgents/com.Apple.Finder.plistに変換できます。

0
Lri