zshでは、ファイル名のみを入力すると、プログラムを使用して.logや.txtなどの特殊なサフィックスまたは拡張子を持つすべてのファイルを開くことができます。
$ alias -s txt=nano
$ word.txt
nanoを使用してword.txtファイルを開きます。 Bashでどうすればいいですか?
答え1
どうですかexec zsh
?
ただし、この機能は実際にbashで利用できます(バージョン4.0では、OSXユーザーは前の段落を参照)。ほとんど。 Bashが で見つからないコマンドを見つけた場合は、次PATH
のコマンドを実行します。command_not_found_handle
。ファイルが現在のディレクトリにある場合は、ファイルを開こうとする関数を作成できます。
typeset -A extension_aliases
command_not_found_handle () {
if [[ $# -eq 1 && -e $1 && $1 = *.* ]]; then
local handler="${extension_aliases[${1##*.}]}"
if [[ -n $local_handler ]]; then
eval "$local_handler \"\$@\""
return
fi
fi
return 127
}
alias -s txt=nano
使用する代わりにextension_aliases[txt]=nano
。
このアプローチには制限があります。ファイルはcommand_not_found_handle
スラッシュを含まないコマンド名でのみ呼び出されるため、現在のディレクトリに存在する必要があります。また、ファイル名を完成させることはできません。
既存のメカニズムを使用する方がはるかに簡単です。
xdg-open word.txt
または Debian とその派生物から
see word.txt
いくつかの利点を得ることができます。プログラムの拡張をマップするシステムデータベースが既に存在し、完成が機能し、シェルで特別な処理は必要ありません。より多くの入力が必要ですが、単一文字のエイリアスを定義するか(後にスペースが必要です)、行の先頭xdg-open
にキーバインディングを挿入できます。
bind -x '"\eo": READLINE_LINE="xdg-open $READLINE_LINE"; READLINE_POINT+=9'