xdg-open을 사용하여 새로운 프로세스로 URL을 엽니 다.


13

웹 개발 환경 으로 Debian을 기반으로하고 Terminator를 사용하는 Crunchbang 을 실험하기 시작했으며 , 어려움을 겪고있는 것 중 하나는의 동작입니다 . 나는 OSX 배경에서 왔 으므로이 질문이 조밀 해지면 저를 용서하십시오.xdg-open

URL을 열어서 xdg-open http://www.google.com동일한 터미널 창을 계속 사용하여 작동하고 싶습니다 ( openOSX 의 기능 방식 ). 지금 사용 xdg-open하면 브라우저 창을 닫거나로 수동으로 항목을 종료 할 때까지 현재 탭 / 세션 을 차지합니다 ctrl + c. URL을 열고 페이지의 데이터를 참조하여 추가 프로세스를 열지 않고도 동일한 탭 / 창에서 사용할 수있는 새로운 프로세스를 시작하는 것이 좋습니다.


어떤 웹 브라우저를 사용하고 있습니까?
Cristian Ciupitu

답변:


11

이상하게도, 그것은 데비안에서 바로 작동합니다. 백그라운드에서 실행 해보십시오.

xdg-open http://www.google.com &

~/.bashrc파일에 다음 줄을 추가하여 이것을 함수로 만들 수 있습니다 .

function open () {
    xdg-open "$*" &
}

그런 다음 간단하게 실행할 수 있으며 open http://www.google.com백그라운드에서 실행됩니다.


1
이것은 잘 작동합니다. 쉘 별칭을 사용하지 않고 open기능을 얻는 방법이 xdg-open <url> &있습니까?
Nick Tomlin

@NickTomlin 내가 아는 한, 아니요, 기능에 대해 무엇을 얻었습니까? 내 업데이트 된 답변에서 볼 수 있듯이 별명만큼이나 간단합니다.
terdon

특별한 편견은 아니지만 Mac OS 및 * nix 맛에 동일한 별칭을 사용하고 재사용하려고하기 때문에 기능을 피하고 싶었습니다.
Nick Tomlin

당신이 할 수없는 이유가 없습니다. 문제는 모든 시스템에서 bash를 사용하는 한 셸에 따라 달라지며 완벽하게 작동합니다.
terdon

Fedora 20에서도 즉시 사용할 수 있습니다.
Cristian Ciupitu

7

을 사용하여 백그라운드 작업으로 시작하지 않고 현재 쉘에서 프로세스를 분리 xdg-open http://www.google.com &하려면 detach유틸리티가 마음에 듭니다.

detach xdg-open http://www.google.com

이것에 대한 별칭을 만들 수 있습니다. 내가 좋아하는 detach이상 nohup그 호출이 청소기는 그래서 기본적으로 닫히고 표준 입력 표준 출력과 표준 에러로.


3
아아, detach내 배포판에 존재하지 않는 것 같습니다. nohup프로세스를 시작하지만 여전히 터미널 창을 차지합니다.
Nick Tomlin

detach내 배포판에도 없습니다. 그러나 파이썬은 URL 열기 및 분리를 처리 할 수 ​​있습니다 python -m webbrowser -t "http://example.com". 이것은 거의 모든 최신 리눅스 배포판에서 즉시 작동해야합니다.
크렛

detachAUR에도 포함되어 있지는 않지만 소스에서 쉽게 설치할 수 있으며, 내가 원하는 것을 달성 한 유일한 프로그램이었습니다. (여기 및 detach웹 사이트 에 나열된 대안 xdg-open은 실행 중일 때 쉘을 닫을 수 없거나 적어도 detach내 쉘이 1 비트를 불평하게하지 않습니다)
rien333

4

xdg-open프로그램이 끝날 때까지 기다립니다. 이것은 의도적으로 설계된 동작입니다. 프로그램이 텍스트 모드 프로그램 인 경우 터미널의 전경에 있어야합니다. 프로그램이 GUI 인 경우에도이 동작은 xdg-open스크립트에서 사용되며 파일을 편집 한 후 스크립트가 무언가를 수행하려고하는 경우에 유용합니다 (예 : 새 버전을 어딘가에 보내거나 다른 방법으로 새 ​​버전으로 작성).

기다리지 않으려면 xdg-open백그라운드에서 실행 하십시오. 끝에 앰퍼샌드를 넣어서 백그라운드에서 쉘 명령을 실행할 수 있습니다.

xdg-open http://www.google.com &

일부 프로그램에서는 xdg-open즉시 돌아옵니다. 실제로 발생하는 프로그램 xdg-open은 즉시 반환됩니다. 이는 일반적으로 단일 인스턴스에서 모든 파일을 여는 GUI 프로그램에서 발생합니다. 두 번째로 파일을 시작하면 실행중인 인스턴스에 메시지를 보내 파일을 열고 즉시 종료합니다.


이러한 애플리케이션은 단일 인스턴스 정책을 어떻게 구현합니까? DBus는 내가 아는 한 가지 방법이지만 이것을 구현하는 'xdg'방법이 있습니까?
PnotNP

@NulledPointer Lock 파일, X11 윈도우 메시지, D-Bus,… D-Bus가 "표준"Freedesktop 방식이라고 생각하지만 공식적인 사양이 있는지는 모르겠습니다.
Gilles 'SO- 악의를 멈춰라'

2
내 Ubuntu 16.04 시스템에서 xdg-open은 항상 즉시 반환됩니다. 현재 응용 프로그램의 경우 실제로 차단하는 것을 선호합니다. "xdg-open은 프로그램이 끝나기를 기다립니다. 이것은 의도적으로 설계된 것입니다." 정보는?
Charl Botha

@CharlBotha xdg-open는 즉시 반환하지만 (Ubuntu 16.04에서 확인할 수 있음) 호출하는 프로그램이 백그라운드로 이동할 수 있습니다. 예를 들어, 내 시스템에서 xdg-openPDF 파일에 대해 Evince를 호출합니다. PDF가 열려 있지 않으면evince foo.pdf PDF 파일을 닫을 때까지 차단 됩니다.이 경우 두 번째 프로세스 는 기존 인스턴스 에 초점을두고 종료됩니다. 프로그램이 계속 실행중인 프로세스를 유지할 수있는 방법이 없으면 제어 할 수 없습니다. evincexdg-openxdg-open
Gilles 'SO- 악마 그만두 다'

@Gilles Charl Botha를 오해 한 것 같습니다. 귀하의 답변에 "xdg-open은 프로그램이 완료되기를 기다립니다. 이것은 의도적으로 설계된 것입니다." 그러나 귀하의 의견은 "xdg-open이 즉시 반환합니다"라고 말합니다 ... 모순입니다.
cheshirekow

1

terdon의 답변Dan D.의 토론을 결합하여nohup 원하는 것을 정확하게 수행하는 함수를 만들었습니다.

  1. 선택한 앱에서 파일을 열지 않고 엽니 ​​다 어떤 모두에서 터미널로 쓰기.
  2. 터미널 창을 닫을 수 있도록 프로세스를 분리합니다.
  3. 앱이 생성하는 오류를 터미널에 쓰지 않습니다.

나는 이것을 내 .bashrc/.zshrc파일에 추가했다 .

function open () {
  nohup xdg-open "$*" > /dev/null 2>&1
}

에 대한 설명은 숨기기 에 대한 토론/dev/null 2>&1참조하십시오 .stdoutstderr


0

이 시도:

DISPLAY=:0.0; xdg-open '<url>'

이 기술을 사용하여 magnet : // URL을 Bit Torrent 클라이언트 Vuze에 대기열에 넣습니다.

ssh someserver "DISPLAY=:0.0; xdg-open 'http://www.google.com/'"

작은 따옴표는 URL의 내용을 보호하여 쉘이이를 해석하지 않도록합니다.


그래도 프로세스는 현재 터미널 창에서 계속 실행됩니다. 내 질문을 명확히해야하는지 알려주세요.
Nick Tomlin

그래, 만약 당신이 즉시 배경으로 가고 싶다면 앰퍼샌드 "&"로 배경에 놓으십시오. @terdon의 대답이 그렇게 대답하지 않습니까?
slm

여기서 문제는 xdg-open이 아니며 @Gilles 답변을 참조하십시오. xdg-open이 개최되는 이유를 설명합니다.이 URL은 xdg-open을 대기시키는 URL을 보내는 GUI입니다.
slm

어떤 브라우저로 URL을 보내 시나요? URL을 w /로 보낼 때 대화 상자 나 다른 것이 표시 xdg-open됩니까? 여러 응답자가 여기에서 정상적인 동작은 일정 시간이 지나면 제어가 터미널로 반환된다는 것을 나타냅니다.
slm

설명 주셔서 감사합니다. 나는 답변을 검토했으며 지금은 이것을 더 잘 이해합니다. 브라우저는 iceweasal입니다.
Nick Tomlin

0

명령 행 (루프)에서 웹 페이지를 열어야하는 경우 스크립트를 시작하기 전에 브라우저를 열면됩니다.

이 경우 첫 번째 링크 후 브라우저가 닫힐 때까지 기다리지 않고 새 탭에서 모두 엽니 다.


0

오늘처럼 그 옵션들 중 어느 것도 나를 위해 일하지 않았습니다. OP가 "xdg-open 사용"이라고 말한 것을 미리 알고 있습니다.

나는 데드 심플을 끝내었다 chrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.es.

이 3 가지 브라우저가없는 경우 원하는대로 원하는 브라우저를 자유롭게 사용하십시오.

참고 : Firefox는 아무것도 추가하지 않고 새 창을 열었습니다. 케이스가 당신을 위해 seamesly 작동하지 않습니다, 사용하십시오 firefox https://google.es -new-instance -new-window. 하나의 참고 -파이어 폭스 플래그.


0

자기 것이 아니라고 말하다 이 이에 대한 올바른 명령입니다.

더 읽기 쉽게하기 위해 2 개의 함수를 사용합니다.

f_x()
{
   xdg-open "$1" &
   disown
}

x()
{
   f_x "$*" > /dev/null 2>&1
}

다른 함수를 호출하는 함수가 3 줄 길이의 단일 함수보다 읽고 이해하기 쉽다고 생각하십니까?
G-Man, 'Reinstate

disown오류가 터미널로 전송되는 것을 막지 않습니다.
LondonRob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.