다음을 추가 .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
또는 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
.