.bash_profile
またはに次を追加し.bashrc
、新しいセッションを開始します。
function _complete_open {
cur=$2
COMPREPLY=( );
[[ "$COMP_WORDS" = "open" ]] || return
[[ "${COMP_WORDS[ $(( $COMP_CWORD - 1 )) ]}" = "-a" ]] || return
OLDIFS="$IFS"
IFS=$'\n'
local _part="${COMP_WORDS[$COMP_CWORD]}"
if [[ "${_part:0:1}" = '"' || "${_part:0:1}" = "'" ]] ; then
COMPREPLY=( $( compgen -W "$( mdfind kMDItemKind==Application | sed -e 's|.*/||g' -e 's|.app$||' | sort -u )" -- $cur ) )
else
COMPREPLY=( $( compgen -W "$( mdfind kMDItemKind==Application | sed -e 's|.*/||g' -e 's|.app$||' -e 's| |\\\\ |g' | sort -u )" -- $cur ) )
fi
IFS="$OLDIFS"
}
complete -o default -F _complete_open open
何もインストールする必要はありません。これbash
はそのまま使用できます。
前のオプションが存在する場合にのみプログラム名をオートコンプリートし-a
、それ以外の場合はデフォルトの動作を示します。たとえば、現在のディレクトリ内のすべてのファイルのリストを返すか、現在のパスプレフィックスを補完します。
結果はから生成されますsystem_profiler SPApplicationsDataType
。これは、そのようなシステムでこの方法で起動できるすべてのアプリケーションを取得する最も簡単な方法です。リストは、プログラム名のみを返すように処理されます。プログラム名にはスペースを含めることができ、バンドル名とは異なる場合があります(.app
サフィックスを無視する場合でも)
使用法:を入力しopen -a
、その後にスペースを入力してから、Tab
or を押しますEsc
(システム上で2回、どこにあるかわからない)。
スキャナーのすべてのヘルパーアプリケーションを示す例:
$ open -a Scan
Scan to E-mail Scan to Excel Scan to Folder Scan to Print Scan to Searchable PDF Scan to Word ScanSnap Manager
このソリューションの欠点と問題:
あなたのシステムには気づかないかもしれないプログラムがたくさんあります/System/Library/CoreServices
。それらすべてをリストしたくないかもしれません。OTOH、見たり起動しCharacterPalette
たりするのはとても簡単KeyboardViewer
です。* 引数を使用mdfind
して呼び出しを適切に構成し-onlyin
ます。
が原因で、時間がかかりsystem_profiler SPApplicationsDataType
ます。完了が表示されるまで1〜2秒待つ必要がある場合があります。今すぐにmdfind
プログラムを取得するために使用します。ありがとう@Lri
アプリケーション名のスペースと引用符で囲まれたプログラム名を処理できますが、かなりハックです。引用符を最初の文字にする必要があります:Scan" to "P
で有効ですがbash
、このプログラムはそれを検出しません。エスケープされたスペースの後も補完は機能しません(例Scan\ to
:)"Scan to
。そのような場合は引用符を使用します()。エスケープされたスペースのサポートは、を完了DVD
するのに適していDVD\ Player
ます。