Thêm phần sau vào .bash_profile
hoặc .bashrc
khởi chạy phiên mới:
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
Không cần cài đặt gì cả. Điều này làm việc với bash
ra khỏi hộp.
Nó sẽ chỉ tự động hoàn thành tên chương trình nếu tùy chọn trước đó -a
và mặt khác hiển thị hành vi mặc định, ví dụ: trả về danh sách tất cả các tệp trong thư mục hiện tại hoặc hoàn thành tiền tố đường dẫn hiện tại.
Các kết quả được tạo từ system_profiler SPApplicationsDataType
đó, đây là cách dễ nhất để có được tất cả các ứng dụng có thể được khởi chạy theo cách này trên hệ thống của bạn như thế. Danh sách được xử lý để chỉ trả về tên chương trình, có thể chứa khoảng trắng và có thể khác với tên gói (ngay cả khi bỏ qua .app
hậu tố)
Cách sử dụng: Nhập open -a
, theo sau là khoảng trắng, sau đó nhấn Tab
hoặc Esc
(hai lần trên hệ thống của tôi, không chắc nó có ở mọi nơi không).
Ví dụ hiển thị tất cả các ứng dụng trợ giúp cho máy quét của tôi:
$ 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
Hạn chế và vấn đề của giải pháp này:
Có rất nhiều chương trình trên hệ thống của bạn mà bạn có thể không biết, như mọi thứ trong đó /System/Library/CoreServices
. Bạn có thể không muốn liệt kê tất cả chúng. OTOH, thật dễ dàng để xem và khởi chạy, ví dụ CharacterPalette
hoặc KeyboardViewer
theo cách này. * Định cấu hình mdfind
(các) cuộc gọi một cách thích hợp với -onlyin
đối số.
Đó là loại chậm, do system_profiler SPApplicationsDataType
. Bạn có thể phải đợi một hoặc hai giây trước khi hoàn thành xuất hiện. Bây giờ sử dụng mdfind
để nhanh chóng có được các chương trình. Cảm ơn @ Lri
Nó có thể xử lý các khoảng trắng trong tên ứng dụng và trích dẫn tên chương trình kèm theo, nhưng nó khá hack. Nó yêu cầu trích dẫn phải là ký tự đầu tiên: Mặc dù Scan" to "P
có giá trị trong bash
nhưng chương trình này sẽ không phát hiện ra nó. Hoàn thành không hoạt động sau khi một không gian thoát (ví dụ Scan\ to
), sử dụng dấu ngoặc kép trong các trường hợp như vậy ( "Scan to
). Hỗ trợ cho các không gian thoát là chỉ tốt để hoàn thành DVD
đến DVD\ Player
.