Ни один из ответов, которые я видел, не работал при использовании urxvtd
, и в этом случае все окна терминала связаны с одним и тем же процессом демона urxvtd
, и, похоже, нет простого способа определить правильный экземпляр оболочки для получения PWD.
Для решения этой проблемы я использовал некрасивый хак. Я использую zsh с трюком preexec
для отображения в заголовке окна текущего каталога (вместе с текущей и последней командой, временем и т.д.), Что, на мой взгляд, полезно в любом случае. Я делаю это с чем - то в следующей форме в моей zshrc
(вам нужно будет адаптировать его, увидеть эту команду , см здесь для полной последней версии):
preexec () {
local WD="$(pwd | sed "s/^\/home\/$USER/~/")"
export LASTDATE="`date +%T`"
if [[ "$TERM" == "rxvt-unicode" || "$TERM" == "rxvt-unicode-256color" ]]; then
export COMMAND="$(echo $1 | tr -d '\n')"
echo -ne "\e]0;$LOCALNAME $HOST:$WD$ $COMMAND ($LASTDATE)\a"
fi
}
Тогда я только что сделал скрипт для запуска нового urxvt
в том же каталоге, например сфокусированного urxvt, просто путем выделения заголовка в текущем сфокусированного окне (см здесь для последней версии):
#!/bin/bash
# run ARGV, with -cd FOLDER if FOLDER can be extracted from title of current
# window (see zsh config for how the title gets put in the window)
# http://superuser.com/a/403369/77814
quoted_args="$(printf " %q" "$@")"
# inspired by
# https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/%3C/p%3E.html
ID=$(xdpyinfo | grep focus | cut -d ',' -f1 | rev | cut -d ' ' -f1 | rev)
CLASS=$(xprop -id "$ID" | grep -m1 WM_CLASS | cut -d'"' -f2)
# https://stackoverflow.com/a/19411918
if [ "${CLASS^^}" != "URXVT" ]
then
# no urxvt focused -- just do the default
# optionally we could try to extract the pwd with
# https://github.com/schischi-a/xcwd or something
exec $quoted_args
fi
TITLE=$(xprop -id "$ID" | grep -m1 WM_NAME)
MYPWD=$(echo "$TITLE" | cut -d'$' -f1 | cut -d'"' -f2- | cut -d':' -f2-)
MYPWD2="${MYPWD/#\~/$HOME}"
if [ ! -z "$MYPWD2" -a -d "$MYPWD2" -a -r "$MYPWD2" -a -x "$MYPWD2" ]
then
exec $quoted_args -cd "$MYPWD2"
else
exec $quoted_args
fi