คำสั่ง `เปิด 'เพื่อเปิดไฟล์ในแอปพลิเคชัน


13

ทำไมฉันไม่สามารถเรียกใช้คำสั่งนี้ใน terminal ของฉัน:

open index.html

มันควรจะเปิดไฟล์นี้ในเบราว์เซอร์ของฉันหรือไม่? open index.html -a "Sublime Text"นอกจากนี้ผมไม่สามารถเรียกใช้คำสั่งนี้: ผลลัพธ์ของคำสั่งเหล่านี้คือ:

$ open index.html
Couldn't get a file descriptor referring to the console

$ open index.html -a "Sublime Text" - 
open: invalid option -- 'a' 
Usage: open [OPTIONS] -- command

2
ฉันถือว่าคุณหมายความว่าxdg-openควรเปิดไฟล์ในเบราว์เซอร์ของคุณ openคำสั่งจะเชื่อมโยงไปที่openvtคำสั่งและเปิดไบนารีในคอนโซลเสมือนใหม่ เห็นได้ชัดว่าไม่ใช่สิ่งที่คุณต้องการ
Marco

1
สมมติว่าคุณอยู่ในระบบ OSX? ฉันไม่เชื่อว่ามีopenคำสั่งใด ๆบน Linux
slm

1
@slm, มาร์โกชี้ให้เห็นมีopenคำสั่งบนลินุกซ์ที่เชื่อมโยงกับopenvt; ข้อความแสดงข้อผิดพลาดในคำถามสอดคล้องกับสถานการณ์นั้น
Stephen Kitt

xdg-open filename_or_URL
Ijaz Ahmad Khan

1
@EdgarOliveira หากคุณต้องการเปิดโปรแกรม (ไบนารี) เพียงแค่พิมพ์ชื่อลงในเทอร์มินัล หากคุณต้องการเปิดไฟล์ด้วยโปรแกรมที่เกี่ยวข้องให้ใช้xdg-open <file>และควรเปิดไฟล์ด้วยโปรแกรมที่เกี่ยวข้อง
Marco

คำตอบ:


19

วัตถุประสงค์หลักของopenคำสั่งของ OS X คือการเปิดไฟล์ในแอปพลิเคชันที่เกี่ยวข้อง เทียบเท่าว่าเมื่อวันที่ Unices ไม่ใช่ OSX xdg-openที่ทันสมัย

xdg-open index.html

xdg-openไม่มีเทียบเท่ากับ OSX open -aเพื่อเปิดไฟล์ในแอปพลิเคชันเฉพาะ นั่นเป็นเพราะวิธีปกติในการเปิดไฟล์ในแอปพลิเคชันคือเพียงพิมพ์ชื่อของแอปพลิเคชันตามด้วยชื่อของไฟล์ แม่นยำยิ่งขึ้นคุณต้องพิมพ์ชื่อของโปรแกรมปฏิบัติการที่ใช้งานแอปพลิเคชัน

sublime_text index.html

ลินุกซ์เช่นระบบ Unix อื่น ๆ ( แต่ไม่เท่าที่ผมรู้ว่าชิ้นส่วนที่ไม่ Unixy ของ OS X) จัดการซอฟต์แวร์โดยการติดตามกับผู้จัดการแพคเกจและทำให้แต่ละไฟล์ที่พวกเขาจะใช้ ตัวอย่างเช่นโปรแกรมปฏิบัติการทั้งหมดที่อยู่ในชุดเล็ก ๆ ของไดเรกทอรีและไดเรกทอรีทั้งหมดที่มีการระบุไว้ในPATHตัวแปร ; ทำงานsublime_textลักษณะขึ้นไฟล์ที่เรียกว่าในไดเรกทอรีที่ระบุไว้ในsublime_text PATHOS X ต้องการระดับการอ้อมที่เพิ่มขึ้นopen -aเพื่อจัดการกับแอปพลิเคชั่นที่ไม่ได้แพ็คในแผนผังไดเรกทอรีเดียวและลงทะเบียนในฐานข้อมูลแอปพลิเคชัน Linux ไม่มีฐานข้อมูลแอปพลิเคชันใด ๆ แต่มีการจัดระเบียบในลักษณะที่ไม่ต้องการ

หากการรันsublime_textเชลล์คำสั่งไม่ทำงานสำหรับคุณแสดงว่า Sublime Text ไม่ได้รับการติดตั้งอย่างเหมาะสม ฉันไม่เคยใช้และเห็นได้ชัดว่ามันมาเป็นไฟล์เก็บถาวร tar ไม่ใช่แพคเกจการแจกจ่าย (เช่น deb หรือ rpm) ดังนั้นจึงเป็นไปได้ที่คุณจะต้องทำขั้นตอนการติดตั้งเพิ่มเติม มันเป็นหน้าที่ของผู้สร้าง Sublime Text ที่จะทำให้มันเป็นอัตโนมัติ แต่ถ้าพวกมันไม่ได้ทำคุณอาจทำได้ด้วยตัวเองโดยใช้คำสั่ง

sudo -s …/sublime_text /usr/local/bin

แทนที่ด้วยพา ธ ที่sublime_textสามารถใช้งานได้แน่นอน

openคำสั่งที่คุณพบเป็นชื่อเก่าสำหรับopenvtคำสั่ง (บางลินุกซ์เท่านั้นรวมไว้ภายใต้ชื่อopenvt) openvtคำสั่งสร้างใหม่คอนโซลเสมือนซึ่งสามารถทำได้โดย root และไม่ได้ใช้บ่อยในศตวรรษนี้เนื่องจากคนส่วนใหญ่เท่านั้นที่เคยทำงานในสภาพแวดล้อมหน้าต่างกราฟิก


แต่ถ้าฉันใช้คำสั่งนี้ "sublime_text indext.html" ฉันได้รับผลลัพธ์นี้ "sublime_text: คำสั่งไม่พบ" ฉันจะทำให้เกิดปัญหาได้อย่างไร?
Edgar Oliveira

@EdgarOliveira ฉันคิดว่าฉันเห็นปัญหาดูเหมือนว่า Sublime Text ไม่ได้มาพร้อมกับแพ็คเกจที่เหมาะสมใช่ไหม ดูการแก้ไขของฉัน
Gilles 'ดังนั้นหยุดความชั่วร้าย'

ฉันสร้างนามแฝงสำหรับที่: alias sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper' แต่เมื่อฉันรัน "sublimetext" เปิดสองหน้าต่างแทนหนึ่งเดียว! ทำไม? ขอบคุณ
Edgar Oliveira

เมื่อฉันเปลี่ยนไฟล์. bashrc ฉันมีข้อสงสัย "วิธีรีเซ็ตไฟล์. bashrc เพื่อให้สามารถดำเนินการนามแฝงใหม่ได้อย่างไรบนเทอร์มินัลเดียวกันที่ฉันทำการเปลี่ยนแปลง" google มันและพบคำตอบใน Unix และ Linux และเดียวที่คุณต้องดำเนินการคำสั่ง "ทุบตี" และคุณจะเรียกใช้นามแฝงของคุณใหม่ :)
เอ็ดการ์ Oliveira

7

คุณไม่ได้พูดถึงระบบปฏิบัติการที่คุณใช้

ใน Linux ดิสทริบิวเตอร์openคำสั่งนั้นเป็นลิงค์สัญลักษณ์ไปยัง openvtคำสั่งซึ่งเปิดไบนารีในคอนโซลเสมือนใหม่ เห็นได้ชัดว่าไม่ใช่สิ่งที่คุณต้องการ ข้อความแสดงข้อผิดพลาดของคุณระบุว่าคุณเรียกใช้openvtคำสั่งอย่างแน่นอน คำสั่งนี้คาดว่าโปรแกรมไบนารี (ปฏิบัติการ) เป็นอาร์กิวเมนต์

ฉันถือว่าคุณหมายความว่าxdg-openในทางตรงข้ามopenvtไม่คาดว่าไฟล์ที่เรียกใช้งานจะเป็นอาร์กิวเมนต์ แต่ไฟล์ที่เชื่อมโยงกับโปรแกรมและเปิดไฟล์ด้วยโปรแกรม คุณสามารถส่งไฟล์และ URL เป็นอาร์กิวเมนต์

ดังนั้นxdg-open index.htmlควรเปิดไฟล์ในเบราว์เซอร์ของคุณ xdg-open image.pngควรเปิดไฟล์ในโปรแกรมดูรูปภาพของคุณ ฯลฯ


1
ปัญหาเดียวคือ xdg-open จะเปิดไฟล์ในแอปพลิเคชันเริ่มต้นสำหรับประเภทไฟล์ คุณไม่สามารถเลือกแอปพลิเคชันด้วย xdg-open ฉันไม่รู้ว่ามีคำสั่งให้เลือกแอพหรือไม่ แต่ถ้าคุณรู้จักแอพ (เช่นในตัวอย่าง "Sublime Text") จะเป็นการดีกว่าถ้าจะเรียกใช้โปรแกรมโดยตรง
X3MBoy

1
@ X3MBoy แนวคิดเบื้องหลังการxdg-openโทรคือการเรียกใช้แอปพลิเคชันเริ่มต้นสำหรับไฟล์นั้น <program> <file>หากคุณต้องการที่จะใช้โปรแกรมที่แตกต่างกันเพียงโทร ฉันไม่เห็นปัญหา
Marco

เขาถามถึงคำสั่งที่ต้องทำ: open index.html -a "Sublime Text" -นั่นคือเหตุผลที่ฉันพูดว่า "ปัญหา" เพราะถ้าคุณใช้xdg-openเพื่อเปิดไฟล์ html มีโอกาสที่ bettern ที่ไฟล์ th จะถูกเปิดโดยเบราว์เซอร์ไม่ใช่โดยโปรแกรมแก้ไขข้อความเช่น "Sublime Text"
X3MBoy

3

แม้ว่าคนมักจะตั้งชื่อxdg-openตามการเลียนแบบการทำงานของopenmacOS openนั้นแตกต่างกันเล็กน้อยเพราะ 1. ไม่เปลี่ยนเส้นทางจาก stdout / stedrr และ 2. แยกสิ่งที่คุณต้องการเรียกใช้จากเทอร์มินัล (ซึ่งเกือบทุกสิ่งที่คุณต้องการเมื่อเปิดใช้ GUI แอพเพื่อให้คุณไม่มีเทอร์มินัลวางรอบ)

เพื่อแก้ปัญหานี้ฉันได้สร้างเครื่องมือที่เทียบเท่าโดยใช้เครื่องมือ GNU มาตรฐาน (ไวยากรณ์คือเชลล์หอย แต่การแปลงเป็นทุบตีนั้นเล็กน้อย)

function open
    for i in $argv
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    end
end

เพิ่ม :

สำหรับผู้ที่ใช้เปลือก bash นี่คือฟังก์ชัน:

open ()
{
    for i in $*
    do
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    done
}

2

ทางออกของฉัน (ใช้ในชีวิตประจำวัน) คือการใช้สำหรับaliasxdg-open

เพียงแค่ใส่สิ่งนี้กับคุณ~/.bashrc:

alias open='xdg-open '

source ~/.bashrcจากนั้นปิดและรีสตาร์ทเปลือกของคุณหรือ

ตอนนี้คุณสามารถเปิดไฟล์ใด ๆ ด้วยคำสั่งนั้น ... จาก. png ถึง. jpg ถึง. dococ ถึง. pdf ถึง. txt

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