เปิดไฟล์จากเทอร์มินัลเท่านั้นโดยพิมพ์ชื่อ


15

ฉันรู้ว่าxdg-openจะเปิดไฟล์จากเทอร์มินัลในแอปพลิเคชันที่ผู้ใช้ต้องการเช่นนี้:

xdg-open filename

แต่ฉันสงสัยว่าฉันจะเปิดไฟล์จากไดเรกทอรีปัจจุบันในแอปพลิเคชันเริ่มต้นได้อย่างไรโดยการพิมพ์:

filename

ตามมาด้วยEnterแน่นอน ไม่มีอะไรเพิ่มเติม


1
สมมุติว่าคุณสามารถแก้ไขcommand_not_found_handle()ฟังก์ชั่นใน/etc/bash.bashrcการตรวจสอบและ xdg-open ไฟล์ในไดเรกทอรีเดียวกันได้หรือไม่?
chronitis

1
ฉันสามารถลดความเสี่ยงของคุณด้วยการใช้นามแฝง alias open = "xdg-open" open เป็นตัวแปรอย่างง่าย คุณสามารถทำให้มันสั้นตามที่คุณต้องการ
rɑːdʒɑ

คำตอบ:


20

ใช้อูบุนตูของcommand-not-foundเบ็ดตามที่ระบุไว้ในคำสั่งไม่พบเมจิก ปัจจุบันใช้เพื่อแนะนำแพ็คเกจที่จะติดตั้ง อ้างถึง/usr/share/doc/command-not-found/READMEสิ่งที่ควรติดตั้งในระบบของคุณ

ยังดีกว่าเพราะมันไม่ได้ขึ้นอยู่กับcommand-not-foundแพคเกจ (อีกครั้ง) ใช้ Bash builtin command_not_found_handleเพื่อทำxdg-openif $1เป็นไฟล์ที่มีอยู่และมอบหมายกรณีอื่นทั้งหมดให้กับการใช้งานก่อนหน้า

# Save the existing code for the handler as prev_command_not_found_handle.
# Bit of a hack, as we need to work around bash's lack of lexical closure,
# and cover the case when it is not defined at all.
eval "prev_$(declare -f command_not_found_handle)" >& /dev/null \
     || prev_command_not_found_handle () { 
            echo "$1: command not found" 1>&2
            return 127
        }

# Define the new implementation, delegating to prev_handler.
command_not_found_handle () {
    if [ -f "$1" ]; then
        xdg-open "$1"
    else
        prev_command_not_found_handle "$@"
    fi
}

เป็นคำถามที่ดีคุณสมบัติที่ดี


ลองคิดดูอีกครั้ง: คุณอาจไม่ชอบคุณสมบัติเท่าที่คุณคิดเว้นแต่คุณจะขยายbash_completionตัวจัดการ ลองนึกภาพอยากเปิดfile-with-a-long-name.txtแล้วตั้งค่า

alias o='xdg-open'  

จะทำให้ (เกี่ยวกับ) สี่ปุ่มกดพอเพียง:

o f<Tab><Enter>

ในขณะที่พิมพ์ชื่อไฟล์เต็มจะใช้เวลา 26 ที่น่าเบื่อ - และที่ไม่รวม backspacing มากกว่าความผิดพลาดที่หลีกเลี่ยงไม่ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.