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


34

私は、あなたが入力した場合ことを理解しls *、それが実際に展開されls a b c、現在は、直接ファイルを持っているときabおよびc

エンターキーを押す前にこれを拡張する方法があるかどうか疑問に思っていました。Ctrl + Xの動作、またはタブ補完の動作に似ています。

だから自分自身を明確にするために

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

同様の方法で:

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

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


さて、私はほとんど知りませんが、私が知っている最高のものは$ echo * <ENTER>ですls *コマンドの前にそれを行うことができます。もちろん、タブやそれを展開するためのショートカットを打つことはできません。
barlop

しかし、おそらくlinuxユーザーはls *のようなことは何もしないでしょう。おそらくlsでは必要ありませんが、異なるシェルではグロビングの動作が異なるので、移植性はありませんが、便利な場合は問題ありません。しかし、lsの場合は必要ありません。ls * /はディレクトリをリストしますが、lsが行うように設計されているものはあまりリストしません。
-barlop

回答:


19

glob-expand-wordmanから関数を使用できますbash

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

次のようなものを追加します~/.inputrc

Control-x: glob-expand-word

この例で$ ls *は、Ctrl-Xがに展開さ$ ls a b cれます。


8
すでにバインドされているはずです。また、Ctrl-xは既に多くのもののプレフィックスとしてバインドされています。bind -p | grep 'C-x'それらを参照してください。
追って通知があるまで一時停止します。

それがまさに私が探していたものです!ありがとう
ブランプ

@Dennis、まだバインドされていませんでしたが、私の.inputrcに追加しています。これがDebianのデフォルトだと思います。
ブランプ

3
@Dennis:C-x*私のシステムにバインドされています。
-cYrus


11

あなたがしている場合にはviモード(set -o vi)、「魔法の鍵」ですEsc*。これはとの両方bashで機能しkshます。


わかりやすいように、最初にコマンドラインを通常入力しながらアスタリスクを入力し、次に編集モードから抜け出し、すぐにエスケープするとカーソルがアスタリスクに移動し、アスタリスクにあるカーソルでアスタリスクを押すとグロブがもう一度編集モードで展開してドロップします。
NeilG

4
$ bind -q glob-expand-word
glob-expand-wordは、「\ Cx *」を介して呼び出すことができます。

$ bind -q insert-completions
挿入完了は、「\ e *」を介して呼び出すことができます。

これらを使用するには

ls * Ctrl+x *

または

ls * Esc *

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


これは、異なる環境で異なる可能性がある正確なキーバインドを検索するため、最良の回答です。
ウィスバッキー

0

glob-expand-word(\ Cx *)の代わりに挿入完了(\ 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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.