bash 스크립트 내부에서 파일을 어떻게 열 수 있습니까?


22

좋아, 달리기 gedit myfile.txt는 잘 작동합니다. 그러나 파일 유형에 연결된 기본 데스크톱 앱을 사용하여 bash 스크립트 내에서 파일을 여는 것은 어떻습니까?

아래에서 시도해 보았습니다. 터미널에서 수동으로 실행할 때 훌륭하지만 bash 파일에 넣으면 아무 일도 일어나지 않습니다.

#!/bin/bash
xdg-open "myfile.txt"&

대신 어떻게해야합니까?

터미널을 닫은 후에도 파일을 열어 두어야합니다.


1
파일의 경로를 제공하십시오. 따옴표로 묶어야합니까? 따옴표없이 시도
abhishek

7
명령이 아무것도하지 않습니까? 방금 나열한 내용으로 스크립트를 작성 gedit했으며 파일이 나열된 상태로 열립니다 (또는 기존 세션에서 새 탭을 엽니 다). 프로그램이 종료 될 때까지 차단하지 않고 즉시 반환합니다.
James Henstridge

3
또한 터미널에서 스크립트를 실행할 때 어떤 오류가 발생합니까?
Takkat

네. 스크립트에서 파일의 전체 경로를 사용하지만 명확히하기 위해 여기에서 제거했습니다. 따옴표가 있거나없는 차이가 없습니다. 나는 시도했습니다 xtg-open*.txt, *.html다만 실 거예요 작업 - 더.
Industrial

5
@abhishek : 이러한 상황에서 따옴표가 해로운 경우는 없으며 따옴표를 생략하면 문제가 발생할 수있는 경우가 많습니다. 특별한 이유가없는 한, 불필요한 경우에도 항상 모든 문자열을 인용하는 습관을들이는 것이 좋습니다.
Scott Severance

답변:


16

나는 당신의 스크립트가 작동해야한다고 생각합니다. 그러나 약간 더 많은 정보를 얻기 위해 무언가를 추가 할 수 있습니다.

#!/bin/bash
T=`xdg-mime query filetype $1`
echo "opening file "  $1  " of type " $T "with " `xdg-mime query default $T`
xdg-open $1
echo "finished script"

다음과 같은 터미널에서이 스크립트 (my_open.sh)를 실행할 때 :

my_open.sh path/to/somefile.txt

다음과 같은 결과가 나타납니다.

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script

파일 경로가 괜찮고 mimetype이 인식되며 파일을 여는 데 사용되는 desktopfile도 괜찮습니다. 그리고 문제의 파일로 gedit이 열립니다.

이제 다른 파일에서 실행할 때 :

my_open.sh path/to/README

다음과 같은 결과가 나타납니다.

opening file  path/to/README  of type  text/x-readme with
finished script

다른 mimetype과 누락 된 데스크탑 파일에 유의하십시오. 그럼에도 불구하고 xdg-open은 모든 텍스트 파일에 대한 기본값을 엽니 다 (gedit).

따라서 스크립트에 이와 같은 것을 추가하고 예기치 않은 결과가 나오는지 확인하십시오 (그런 다음 질문에 추가 할 수 있습니다 ...).


finished script결국 시끄러운 것을 제외하고는 괜찮습니다 . 침묵의 법칙 인 [ catb.org/~esr/writings/taoup/html /] ( 유닉스 프로그래밍 기술)을 추천 합니다. Btw .: 백틱은 더 이상 사용되지 않습니다. 대신 $ (...)를 선호하십시오. 중첩 가능합니다.
사용자가 알 수 없음

2
스크립트는 추가 정보를 제공하기위한 것입니다. '완성 된 스크립트'에 의해 주어진 정보는 필요가 없다는 것입니다 nohup또는 &,하지만 xdg-open반환하고 계속 할 수 있습니다.
xubuntix

그것이 바로 프롬프트의 의미입니다.
사용자가 알 수 없음

3
참된. 그 방법이 더 분명하다고 생각했습니다. 실제로, 전체 스크립트는 xdg-open이미 필요하지 않기 때문에 전체 스크립트가 필요하지 않습니다 . 따라서 이것은 어쨌든 프로덕션 품질 스크립트가 아닙니다 ...
xubuntix

5

bash 스크립트 test.sh를 다음과 같이 작성하십시오.

#!/bin/bash
gedit myfile.txt

그런 다음 스크립트를 다음과 같이 실행 가능하게 만드십시오.

chmod +x test.sh

마지막으로 스크립트를 다음과 같이 실행하십시오.

./test.sh

귀하의 답변에 감사하지만 불행히도 위에서 언급 한대로 파일에 대한 그놈의 기본 파일 편집기를 열어야합니다.
Industrial

3

어쩌면 xdg-open 대신 gnome-open 일 수 있습니다


이 솔루션이 가장 효과적이라는 것을 알았습니다.
Jon

사용자가 Gnome을 사용하지 않으면 어떻게 되나요?
Goddard

2

올바른 방향으로 가고 있습니다. 터미널 창을 닫을 때 GUI 앱을 열어 두려면 nohup줄의 시작 부분 에을 추가 하면됩니다.

#!/bin/bash
nohup xdg-open "myfile.txt"&

DISPLAY셸에 환경 변수가 설정되어 있지 않아 GUI 응용 프로그램이 열리지 않는 경우 응용 프로그램 을 시작하려고합니다. 에코를 시도하십시오$DISPLAY


3
어느 쪽도 필요하지 않습니다 XDG 오픈 nohup&
xubuntix

0

질문의 첫 부분

이 명령을 사용 cat하면 터미널 내부에서 파일을 열 수 있습니다 (질문의 첫 부분에 명시되어 있음).

사용하려면을 입력하면 cat FILENAME됩니다.

기타 정보

더 많은 명령이 필요한 경우 : 다음 은 좋은 명령 목록입니다.

그놈 기본 편집기

당신은 그놈의 기본 응용 프로그램에서 파일을 열려면 gedit.

사용하려면 입력하십시오. gedit FILENAME


터미널에서 파일을 열지 만 그놈의 기본 편집기는 아닙니다
Industrial

@industrial이 내 답변을 편집했습니다.
Alvar

불행히도, 오픈도 작동하지 않습니다 ...
Industrial

@Industrial 무엇을 요구하고 있습니까? 질문을 더 설명하십시오! 당신은 몇 가지 다른 말을하고 그들 중 하나에 대답했지만 당신은 당신이 그것을 사용하고 싶지 않다고 ...
Alvar

@Industrial 그놈의 기본 텍스트 편집기 gedit 일명 "텍스트 편집기"이므로 실행 gedit file.filetype하면 원하는대로 파일을 열 수 있습니다!
Alvar

0

여기서 실제로 수행 할 작업이 확실하지 않으며 최근 스크립트에서 단일 스크립트가 기본 응용 프로그램에서 모든 파일을 열거 나 응용 프로그램이 지원하는 범위를 확장 해야한다는 의견을 기반으로 합니다.

그렇다면 가장 쉬운 방법은 터미널을 열고 scriptname / path / to / filename으로 이동하거나 경로에 공백이 있으면 scriptname '/ path / to / filename'입니다.

cd; mkdir -p bin && gedit ~/bin/openit1

이것을 스크립트로 사용하십시오. 스크립트에 원하는 이름을 사용할 수 있습니다. 예를 들어 openit1을 사용하겠습니다. ~ / bin에서 직접 스크립트를 사용하여 이름에 숫자를 추가하여 기존 Linux 명령과 충돌하지 않는 것이 가장 좋습니다.

#!/bin/bash
xdg-open "$1"

터미널에서 gedit를 닫고

chmod u+x ~/bin/openit1

$ PATH에 ~ / bin을 추가하려면 다시 시작하십시오.

터미널을 열고 이동하려면

openit1 /path/to/filename or openit1 'path/to/filename' 

orig가 명시된대로 orig를 사용하는 경우. 스크립트 당 하나의 특정 파일에 대한 스크립트 및 호출 d. 스크립트를 마우스 왼쪽 버튼으로 클릭하면 "터미널에서 실행 "대신 " 실행 " 을 선택하면됩니다.


Restart to add ~/bin to your $PATH-오래된 Windows 습관? ;)
사용자가 알 수 없음
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.