현재 터미널에서 노틸러스 디렉토리를 여는 방법은 무엇입니까?


답변:


13

더럽거나 말거나, 아래 솔루션은 자주 테스트 한 30 분 동안 완벽하게 작동했습니다. 디렉토리 내에서 파일을 마우스 오른쪽 단추로 클릭하면 솔루션이 작동합니다.

1.

여기에 이미지 설명을 입력하십시오

2.

여기에 이미지 설명을 입력하십시오

삼.

여기에 이미지 설명을 입력하십시오

노틸러스 스크립트

#!/usr/bin/env python3
import subprocess
import os
import time

def replace(path):
    for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
              ("file://", ""), ("%20", " ")]:
        path = path.replace(c[0], c[1])
    return path

def get(command):
    try:
        return subprocess.check_output(command).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

t = get(["pgrep", "gnome-terminal"])
if t:
    w = [l.split()[0] for l in get(["wmctrl", "-lp"]).splitlines() if t in l][0]
    # get the current path
    current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
    dr = os.path.realpath(current)
    # raise the found terminal window
    subprocess.call(["wmctrl", "-ia", w])
    time.sleep(0.3)
    # copy the cd command to clipboard
    c1 = "printf 'cd ' | xclip -in -selection c"
    c2 = 'echo "'+"'"+dr+"'"+'"  | xclip -in -selection c'
    # paste & run it
    for c in [c1, c2]:
        subprocess.call(["/bin/bash", "-c", c])
        subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
        time.sleep(0.05)

사용하는 방법

  1. 스크립트 wmctrl에는 xdotoolxclip이 필요합니다 .

    sudo apt-get install wmctrl xdotool xclip
    
  2. 스크립트를 빈 파일에 복사하고에 open_in_terminal(확장자 없음) 으로 저장하십시오 ~/.local/share/nautilus/scripts. 필요한 경우 디렉토리를 작성하십시오. 스크립트를 실행 가능하게 만들기

그게 다야. 로그 아웃했다가 다시 로그인하면 이미지 (2)와 같이 스크립트를 사용할 수 있습니다.

설명

  • 파일을 마우스 오른쪽 버튼으로 클릭하면 nautilus '를 사용하여 경로를 얻을 수 있습니다 "NAUTILUS_SCRIPT_CURRENT_URI".
  • 스크립트에서 우리는 다음 클립 보드에이 경로를로드 할 수 있습니다 (사용 xclip)
  • 결과적으로 스크립트는 (처음 찾은) gnome-terminal창을 올리고 경로를 명령 앞에 붙여 넣 습니다 cd. 우리 echo는 전체 라인을 클립 보드에로드하는 데 사용 되었으므로 Return포함되어 있습니다.

노트

  1. 터미널에서 실행중인 것이 없어야하며 터미널 창이 하나만 열려있는 경우 가장 잘 작동합니다. 여러 개가있는 경우 스크립트는 가장 오래된 gnome-terminal창을 선택합니다 .
  2. 실제로는 스크립트를 철저히 테스트해야합니다. 내가 그것을 실행하는 동안, 타이밍은 한 번도 문제가되지 않았다. 심지어 터미널 윈도우에 도달하기 위해 데스크탑이 4 개 또는 5 개의 뷰포트를 가로 질러 이동해야 할 때조차 아니었다. 경우 오류가 몇 줄, 그러나 발생할 수있는 이상 우리는 실제로 만들 수 기다릴 터미널 창을 제기하는 스마트 (어) 방식으로. 어떻게되는지 보자. 필요하지 않은 것 같습니다.
  3. 스크립트는 realpath를 사용하므로 링크 된 디렉토리도 올바르게 작동합니다.

노틸러스 스크립트에 대한 자세한 내용은 여기를 참조하십시오 .


또는 여러 개인 경우 자신의 터미널 창을 선택하십시오

당신은에서 선택할 수 있도록하려면 어떤 당신이 현재 (노틸러스) 디렉토리를 열고 아래의 스크립트를 사용하는 것이 터미널 창.

실제로 작동하는 방식

  1. 아래와 같이 디렉토리 (이 경우 내 데스크탑) 내의 파일을 마우스 오른쪽 단추로 클릭하십시오.

    여기에 이미지 설명을 입력하십시오

  2. 사용하려는 터미널 창을 클릭하거나 다른 방법으로 올리면 디렉토리로 이동합니다.

    여기에 이미지 설명을 입력하십시오

스크립트

#!/usr/bin/env python3
import subprocess
import os
import time

def replace(path):
    for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
              ("file://", ""), ("%20", " ")]:
        path = path.replace(c[0], c[1])
    return path

def get(command):
    try:
        return subprocess.check_output(command).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

# check if gnome-terminal runs
pid = get(["pgrep", "gnome-terminal"])

if pid:
    t = 0
    while t < 30:
        # see if the frontmost window is a terminam window
        active = get(["xdotool", "getactivewindow"])
        if pid in get(["xprop", "-id", active]):       
            # get the current path
            current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
            dr = os.path.realpath(current)
            # copy the cd command to clipboard
            c1 = "printf 'cd ' | xclip -in -selection c"
            c2 = 'echo "'+"'"+dr+"'"+'"  | xclip -in -selection c'
            # paste & run it
            for c in [c1, c2]:
                subprocess.call(["/bin/bash", "-c", c])
                subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
                time.sleep(0.05)
            break
        else:
            t += 1
            time.sleep(0.5)

설정

첫 번째 스크립트와 정확히 같습니다.

설명

스크립트는 첫 번째와는 다른 점이 있습니다. 첫 번째 발견 된 터미널 창을 자동으로 올리는 대신 첫 번째 터미널 창에 포커스가있을 때까지 기다립니다. 그런 다음 해당 창의 내부 디렉토리로 cd됩니다.


어쨌든 스크립트를 시작하기 위해 파일을 사용하고 있으므로 sys.argv [1] 경로에서 파일 이름을 제거하십시오. 스크립트가 훨씬 짧아 질 것입니다
Sergiy Kolodyazhnyy

1
@TonyLancer 메뉴는 디렉토리 ~/.local/share/nautilus/scripts로그 아웃 을 생성 한 후 다시 나타납니다 :)
Jacob Vlijm

1
@Benny 노틸러스 마우스 오른쪽 버튼 클릭에서만 작동합니다.
Jacob Vlijm 23

1
@Benny 스크립트 환경은 상위 프로세스에서 전달됩니다. 이 경우 노틸러스는 스크립트의 상위 프로세스이며 스크립트의 환경을 설정합니다. 파이썬 인터프리터 또는 스크립트에서 동일한 작업을 수행하려고하면 다른 부모 프로세스가 있으므로 None그러한 변수 (노틸러스 외부)가 없기 때문에 반환됩니다 .
Sergiy Kolodyazhnyy

1
@JacobVlijm 당신은 대단합니다. 완전히 작동합니다! 이제 두 번째 스크립트의 작동 방식을 이해했습니다. 트리거에 대한 것이 옳습니다. 우분투 커뮤니티를위한 훌륭한 도구입니다. 물론 우리는 모든 스크립트와 관련하여 많은 개선점에 대해 생각할 수 있지만,이 작업이 가능합니다. 답에서 두 번째 스크립트는 Alt Tab과 함께 작동한다고 언급하십시오.
Vitor Abella

8

나는 이것을 할 수있는 방법이 없다고 확신하지만 도움이 될 수있는 해결 방법이 있습니다.

항상 노틸러스에서 터미널 창으로 디렉토리를 끌어다 놓을 수 있으며 노틸러스는 해당 디렉토리를 전달하여 명령 행에 붙여 넣습니다. 따라서 cd폴더를 터미널로 끌어서 Enter 키를 누르십시오.


8

가장 간단한 방법은 다음과 같습니다.

  1. 노틸러스에서 Ctrl+을 누르면 L주소 표시 줄이 편집을 위해 열립니다. Ctrl+를 누르십시오C
  2. 터미널로 전환하고 cd, 공백을 입력 한 다음 Shift+ Insert (or INS)를 입력하여 경로를 붙여 넣습니다. 을 누르십시오 Enter.

스크립트 나 추가 작업이 필요 없습니다.


Ctrl + Shift + V를 사용하여 경로를 붙여 넣습니다.
카투

1
네, 다른 방법입니다. Linux에는 실제로 두 개의 클립 보드가 있으므로 Ctrl + Shift + V는 기본이고 Shift + Insert는 보조 용이지만 두 번째는 두 개의 키만 필요하기 때문에 주로 사용합니다. 당신이 무언가를 강조하지 않는 한 그것들은 공유됩니다-그것은 물건이 보조 클립 보드에 들어갈 때입니다
Sergiy Kolodyazhnyy

1

내 의견으로는이 문제를 해결하지 않는 유일한 우아한 방법은 tmux 와 같은 터미널 멀티플렉서를 사용하고 파일 관리자를 갖는 것입니다

  • 기존 세션 내에서 새 터미널 창을 열거 나
  • 새로운 tmux 세션으로 새로운 터미널 에뮬레이터를 시작하십시오.

다음 쉘 스크립트는이를 달성합니다.

#!/bin/sh
set -e
TMUX=tmux
#TERMINAL_EMULATOR='gnome-terminal -x'

cd "$1"
if $TMUX has-session; then
  exec $TMUX new-window
else
  exec ${TERMINAL_EMULATOR:-x-terminal-emulator -x} $TMUX
fi

TERMINAL_EMULATOR새 터미널 창에 대해 원하는 터미널 에뮬레이터를 보유하고 있습니다 (기본 설정이 마음에 들지 않으면 x-terminal-emulator) 에뮬레이터 내에서 명령을 실행할 수있는 명령 행 옵션이 있습니다.

파일 관리자에서 다른 파일 형식 연결과 마찬가지로 파일 처리기 스크립트를 등록 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.