web-dev-qa-db-ja.com

エイリアスをbashでインライン展開する方法は?

エイリアスをbashでインライン展開する方法はありますか?

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 
87
asdfg

押すことができます Ctrl-Alt-e readline関数Shell-expand-lineを実行して、エイリアス、履歴、Wordの展開を行います。一部のキーボードでは Meta ではありません Alt。押す必要があるかもしれません Esc その後 Ctrl-e

関数alias-expand-linehistory-and-alias-expand-lineはデフォルトではバインドされていませんが、~/.inputrcファイルに次のような行を追加してバインドできます。

"\e\C-l": alias-expand-line

作るだろう Ctrl-Alt-l (小文字の「エル」)onlyエイリアス展開を実行します。

ZshとOh My ZSHをインストールしていて、簡単な解決策を探している人にとっては、 globalias があなたの友達かもしれません

すべてのグロブ式、サブコマンド、およびエイリアス(グローバルを含む)を展開します。

# .zsrc:
alias S="Sudo systemctl"

$ S<space>
# expands to:
$ Sudo systemctl

インストールするには、「globalias」を.zshrcプラグインリストに追加するだけです

plugins=(... globalias)

次に、SPACEを押して、記述したコマンドの展開をトリガーします。

コマンドラインを展開せずにスペースのみを挿入する場合は、CTRL+SPACEを押します。

4
Can Rau

これは実際には、あなたがやろうとしていることを行うためのはるかに簡単な方法かもしれません(bashversion> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shoptmanページ: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html

これは動作しません。しかし、私はあなたがやりたいことをするためにこのようなことができると思います/期待しています。独自の補完スクリプトを使用する必要があります。これはあなたが作る方法です:

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that Word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

次に、完全なbash_completionファイル( http://caliban.org/bash )を入手し、上記のスクリプトを、URLから参照するスクリプトがbash_completion.dディレクトリ内のファイルに配置します。うまくいかない場合はお知らせください。

ありがとう。

0
0fnt