답변:
더럽거나 말거나, 아래 솔루션은 자주 테스트 한 30 분 동안 완벽하게 작동했습니다. 디렉토리 내에서 파일을 마우스 오른쪽 단추로 클릭하면 솔루션이 작동합니다.
#!/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)
스크립트 wmctrl
에는 xdotool
xclip이 필요합니다 .
sudo apt-get install wmctrl xdotool xclip
스크립트를 빈 파일에 복사하고에 open_in_terminal
(확장자 없음) 으로 저장하십시오 ~/.local/share/nautilus/scripts
. 필요한 경우 디렉토리를 작성하십시오. 스크립트를 실행 가능하게 만들기
그게 다야. 로그 아웃했다가 다시 로그인하면 이미지 (2)와 같이 스크립트를 사용할 수 있습니다.
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
창을 올리고 경로를 명령 앞에 붙여 넣 습니다 cd
. 우리 echo
는 전체 라인을 클립 보드에로드하는 데 사용 되었으므로 Return포함되어 있습니다.gnome-terminal
창을 선택합니다 .노틸러스 스크립트에 대한 자세한 내용은 여기를 참조하십시오 .
당신은에서 선택할 수 있도록하려면 어떤 당신이 현재 (노틸러스) 디렉토리를 열고 아래의 스크립트를 사용하는 것이 터미널 창.
#!/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됩니다.
~/.local/share/nautilus/scripts
로그 아웃 을 생성 한 후 다시 나타납니다 :)
None
그러한 변수 (노틸러스 외부)가 없기 때문에 반환됩니다 .
가장 간단한 방법은 다음과 같습니다.
cd
, 공백을 입력 한 다음 Shift+ Insert (or INS)를 입력하여 경로를 붙여 넣습니다. 을 누르십시오 Enter.스크립트 나 추가 작업이 필요 없습니다.
내 의견으로는이 문제를 해결하지 않는 유일한 우아한 방법은 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
) 에뮬레이터 내에서 명령을 실행할 수있는 명령 행 옵션이 있습니다.
파일 관리자에서 다른 파일 형식 연결과 마찬가지로 파일 처리기 스크립트를 등록 할 수 있습니다.