응용프로그램에서 파일을 열기 위한 "open" 명령

응용프로그램에서 파일을 열기 위한 "open" 명령

터미널에서 이 명령을 실행할 수 없는 이유는 무엇입니까?

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

답변1

OS X의 주요 목적open이 명령은 연결된 응용 프로그램에서 파일을 엽니다. 최신 OSX가 아닌 unice에 해당하는 내용은 다음과 같습니다.xdg-open.

xdg-open index.html

xdg-openopen -a특정 응용 프로그램에서 파일을 여는 데 해당하는 OSX는 없습니다 . 이는 응용 프로그램에서 파일을 여는 일반적인 방법이 단순히 응용 프로그램 이름을 입력한 다음 파일 이름을 입력하는 것이기 때문입니다. 보다 정확하게는 응용 프로그램을 구현하는 실행 프로그램의 이름을 입력해야 합니다.

sublime_text index.html

Linux, 다른 Unix 시스템과 마찬가지로(그러나 내가 아는 한 OS X의 비 Unixy 부분은 아님)패키지 관리자 추적 소프트웨어를 사용하여 소프트웨어를 관리하고 개별 파일을 사용되는 위치에 배치합니다.. 예를 들어 모든 실행 프로그램은 작은 디렉터리 집합에 위치하며 이러한 디렉터리는 모두 다음 디렉터리에 나열됩니다.PATH바꾸다;런타임은 에 나열된 디렉터리에서 sublime_text호출된 파일을 찾습니다. OS X에서는 단일 디렉터리 트리에 압축이 풀리고 응용 프로그램 데이터베이스에 등록된 응용 프로그램을 처리하기 위해 추가 수준의 간접 참조가 필요합니다. Linux에는 애플리케이션 데이터베이스가 없지만 필요하지 않은 방식으로 구성되어 있습니다.sublime_textPATHopen -a

명령 sublime_text셸 실행이 작동하지 않으면 Sublime Text가 올바르게 설치되지 않은 것입니다. 나는 그것을 사용해 본 적이 없으며 배포 패키지(예: deb 또는 rpm)가 아닌 tar 아카이브로 제공되므로 추가 설치 단계를 수행해야 할 수도 있습니다. 이를 자동화하는 것은 실제로 Sublime Text 제작자의 임무이지만 아직 자동화하지 않은 경우 다음 명령을 실행하여 직접 수행할 수 있습니다.

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

물론 실행 파일이 있는 경로로 바꾸세요.sublime_text

발생한 명령은 open이전 이름입니다.openvt명령(일부 Linux 배포판에서는 이름에만 포함되어 있음 openvt). 이 openvt명령은 새로운가상 콘솔, 이는 루트로만 수행할 수 있으며 대부분의 사람들이 그래픽 창 환경에서만 작업하기 때문에 이번 세기에는 자주 사용되지 않습니다.

답변2

어떤 운영 체제를 사용하고 있는지 언급하지 않았습니다.

일부 Linux 배포판에서 이 명령은 open새 가상 콘솔에서 바이너리 파일을 여는 명령에 대한 심볼릭 링크입니다. openvt이것은 분명히 당신이 원하는 것이 아닙니다. 오류 메시지는 명령을 호출했음을 나타냅니다 openvt. 이 명령에는 프로그램 바이너리(실행 파일)가 인수로 필요합니다.

나는 실행 파일을 인수로 요구하지 않고 프로그램과 연결되어 있으며 해당 프로그램을 사용하여 파일을 여는 파일을 의미하는 xdg-open과 비교 하여 을 의미한다고 가정합니다 . openvt파일과 URL을 매개변수로 전달할 수 있습니다.

따라서 xdg-open index.html파일은 브라우저에서 열어야 하고, xdg-open image.png파일은 이미지 뷰어 등에서 열어야 합니다.

답변3

사람들은 종종 이것을 xdg-open에뮬레이션 기능이라고 부르지만 openmacOS는 open1. stdout/stedrr에서 아무것도 리디렉션하지 않고 2. 터미널에서 실행하려는 모든 것을 분리한다는 점에서 약간 다릅니다(거의 항상 사용자가 수행하는 작업). GUI를 시작할 때 원하는 것) 응용 프로그램을 사용하면 터미널이 없습니다)

이 문제를 해결하기 위해 일부 표준 GNU 도구를 사용하여 적합한 상응하는 도구를 생각해냈습니다(구문은 Fish 쉘이지만 bash로의 변환은 간단합니다).

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
}

답변4

매일 사용하는 내 솔루션은 aliasfor xdg-open.

이것을 다음 항목에 넣으세요 ~/.bashrc.

alias open='xdg-open '

그런 다음 셸을 닫고 다시 시작하거나 source ~/.bashrc.

이제 이 명령을 사용하여 .png부터 .jpg, .docx, .pdf, .txt까지 모든 파일을 열 수 있습니다.

관련 정보