Dlaczego nie mogę uruchomić tego polecenia w moim terminalu:
open index.html
Czy nie powinien otworzyć tego pliku w mojej przeglądarce? Również nie mogę uruchomić tego polecenia: open index.html -a "Sublime Text"
. Wynikiem tych poleceń są:
$ 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
command-line
file-opening
Edgar Oliveira
źródło
źródło
xdg-open
co powinno otworzyć plik w przeglądarce.open
Komenda jest link doopenvt
komendy i otwiera binarnego w nowej konsoli wirtualnej. Najwyraźniej nie tego chcesz.open
w Linuksie było jakieś polecenie.open
w Linuksie istnieje polecenie powiązane zopenvt
; komunikaty o błędach w pytaniu są zgodne z tą sytuacją.xdg-open <file>
i powinien otworzyć plik z odpowiednim programem.Odpowiedzi:
Podstawowym celem
open
polecenia OS X jest otwarcie pliku w powiązanej aplikacji. Odpowiednikiem tego w nowoczesnych jednorożcach innych niż OSX jestxdg-open
.xdg-open
nie ma odpowiednika OSXopen -a
do otwarcia pliku w określonej aplikacji. Wynika to z faktu, że normalnym sposobem otwarcia pliku w aplikacji jest po prostu wpisanie nazwy aplikacji, a następnie nazwy pliku. Mówiąc dokładniej, musisz wpisać nazwę programu wykonywalnego, który implementuje aplikację.Linux, podobnie jak inne systemy uniksowe (ale o ile mi wiadomo, części OS X inne niż Unixy) zarządza oprogramowaniem poprzez śledzenie go za pomocą menedżera pakietów i umieszcza poszczególne pliki tam, gdzie są używane . Na przykład wszystkie programy wykonywalne znajdują się w małym zestawie katalogów, a wszystkie te katalogi są wymienione w
PATH
zmiennej ; uruchomionesublime_text
wyszukuje plik o nazwiesublime_text
w katalogach wymienionych wPATH
. OS X potrzebuje dodatkowego poziomu pośredniczenia,open -a
aby obsłużyć aplikacje rozpakowane w jednym drzewie katalogów i zarejestrowane w bazie danych aplikacji. Linux nie ma żadnej bazy danych aplikacji, ale jest zorganizowany w taki sposób, że nie potrzebuje żadnej.Jeśli uruchomienie
sublime_text
powłoki poleceń nie działa, oznacza to, że Sublime Text nie został poprawnie zainstalowany. Nigdy go nie używałem i najwyraźniej jest to archiwum tar, a nie pakiet dystrybucyjny (np. Deb lub rpm), więc możliwe jest, że musisz wykonać dodatkowy krok instalacji. Twórcy Sublime Text naprawdę wykonują to automatycznie, ale jeśli jeszcze tego nie zrobili, prawdopodobnie możesz to zrobić samodzielnie, uruchamiając polecenieOczywiście zastąp
…
ścieżkę, w którejsublime_text
znajduje się plik wykonywalny.open
Komenda napotkał to starsza nazwaopenvt
polecenia (niektóre dystrybucje tylko umieścić go pod nazwąopenvt
).openvt
Polecenie tworzy nową wirtualną konsolę , która może być dokonana jedynie przez administratora i nie jest używane bardzo często w tym wieku, ponieważ większość ludzi tylko kiedykolwiek pracować w środowisku graficznym okna.źródło
Nie wspominasz o używanym systemie operacyjnym.
W niektórych dystrybucjach Linuksa
open
polecenie jest dowiązaniem symbolicznym doopenvt
polecenia, które otwiera plik binarny w nowej konsoli wirtualnej. Najwyraźniej nie tego chcesz. Twoje komunikaty o błędach rzeczywiście wskazują, że wywołałeśopenvt
polecenie. To polecenie oczekuje binarnego programu (pliku wykonywalnego) jako argumentu.Zakładam, że masz na myśli,
xdg-open
co w przeciwieństwie do tegoopenvt
, że nie oczekuje pliku wykonywalnego jako argumentu, ale plik skojarzony z programem i otwierający go wraz z programem. Możesz przekazać pliki i adresy URL jako argumenty.Dlatego
xdg-open index.html
powinien otworzyć plik w przeglądarce,xdg-open image.png
powinien otworzyć plik w przeglądarce zdjęć itp.źródło
xdg-open
połączenia jest wywołanie domyślnej aplikacji dla tego pliku. Jeśli chcesz użyć innego programu, po prostu zadzwoń<program> <file>
. Nie widzę problemu.open index.html -a "Sublime Text" -
Dlatego mówię „problem”, ponieważ jeśli użyjeszxdg-open
do otwarcia pliku HTML, istnieje większe prawdopodobieństwo, że plik zostanie otwarty przez przeglądarkę, a nie przez edytor tekstu, taki jak „Sublime Text”Chociaż ludzie często nazywają
xdg-open
emulowanie funkcjonalnościopen
, macOSopen
jest nieco inny, ponieważ 1. nie przekierowuje niczego ze stdout / stedrr i 2. odłącza wszystko, co chcesz uruchomić z terminala (co jest prawie zawsze tym, czego chcesz, uruchamiając GUI aplikacje, abyś nie miał wokół siebie terminali)Aby rozwiązać ten problem, opracowałem odpowiedni ekwiwalent za pomocą standardowych narzędzi GNU (składnia to fish shell, ale konwersja na bash jest trywialna):
Dodano :
Dla tych, którzy używają powłoki bash, oto funkcja:
źródło
Moim rozwiązaniem (używanym na codzień) jest używanie
alias
dlaxdg-open
.Po prostu umieść to na
~/.bashrc
:Następnie zamknij i uruchom ponownie powłokę lub
source ~/.bashrc
.Teraz możesz otworzyć dowolny plik za pomocą tego polecenia ... od .png do .jpg do .docx do .pdf do .txt.
źródło