Tambahkan yang berikut ke Anda .bash_profile
atau .bashrc
dan luncurkan sesi baru:
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
Tidak perlu menginstal apa pun. Ini berfungsi dengan di bash
luar kotak.
Ini hanya akan melengkapi nama program secara otomatis jika opsi sebelumnya -a
menunjukkan perilaku default, misalnya mengembalikan daftar semua file di direktori saat ini atau menyelesaikan awalan jalur saat ini.
Hasilnya dihasilkan dari system_profiler SPApplicationsDataType
, yang merupakan cara termudah untuk mendapatkan semua aplikasi yang dapat diluncurkan dengan cara ini pada sistem Anda seperti itu. Daftar diproses untuk hanya mengembalikan nama-nama program, yang dapat berisi spasi dan dapat berbeda dari nama bundel (bahkan ketika mengabaikan .app
suffix)
Penggunaan: Ketik open -a
, diikuti spasi, diikuti dengan menekan Tab
atau Esc
(dua kali pada sistem saya, tidak yakin apakah ada di mana-mana).
Contoh memperlihatkan semua aplikasi pembantu untuk pemindai saya:
$ 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
Kelemahan dan masalah dari solusi ini:
Ada banyak program di sistem Anda yang mungkin tidak Anda sadari, seperti semua yang ada di dalamnya /System/Library/CoreServices
. Anda mungkin tidak ingin mendaftar semuanya. OTOH, sangat mudah dilihat dan diluncurkan misalnya CharacterPalette
atauKeyboardViewer
dengan cara ini. * Konfigurasikan mdfind
panggilan dengan -onlyin
argumen yang tepat.
Agak lambat, karena system_profiler SPApplicationsDataType
. Anda mungkin perlu menunggu satu atau dua detik sebelum selesai muncul. Sekarang gunakanmdfind
untuk mendapatkan program dengan cepat. Terima kasih @Lri
Itu dapat menangani spasi dalam nama aplikasi, dan kutipan nama program terlampir, tapi itu agak hacky. Ini membutuhkan kutipan untuk menjadi karakter pertama: Meskipun Scan" to "P
valid bash
, program ini tidak akan mendeteksinya. Penyelesaian tidak berfungsi setelah ruang yang lolos baik (misalnya Scan\ to
), gunakan tanda kutip dalam kasus tersebut ( "Scan to
). Dukungan untuk ruang lolos hanya baik untuk menyelesaikan DVD
ke DVD\ Player
.