เพิ่มรายการต่อไปนี้ใน.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
(สองครั้งในระบบของฉันไม่แน่ใจว่ามันอยู่ทุกที่)
ตัวอย่างที่แสดงแอพพลิเคชั่นตัวช่วยทั้งหมดสำหรับเครื่องสแกนของฉัน:
$ 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
เป็นชนิดของช้าไปเนื่องจาก คุณอาจต้องรอสักครู่หรือสองวินาทีก่อนจะเสร็จ ตอนนี้ใช้mdfind
เพื่อรับโปรแกรมอย่างรวดเร็ว ขอบคุณ @Lri
สามารถจัดการช่องว่างในชื่อแอปพลิเคชันและชื่อโปรแกรมที่อยู่ในเครื่องหมายคำพูด แต่ค่อนข้างแฮ็ค มันต้องมีการอ้างถึงเป็นตัวอักษรตัวแรก: ในขณะที่Scan" to "P
ถูกต้องในbash
โปรแกรมนี้จะไม่ตรวจพบมัน การทำให้สมบูรณ์ไม่สามารถทำได้หลังจากพื้นที่หลบหนี (เช่นScan\ to
) ใช้เครื่องหมายอัญประกาศในกรณีเช่นนี้ ( "Scan to
) การสนับสนุนสำหรับพื้นที่หลบหนีเป็นเพียงที่ดีที่จะเสร็จสิ้นไปDVD
DVD\ Player