如何在当前目录中打开新终端?

如何在当前目录中打开新终端?

当在目录中时,我有时希望在同一目录中打开另一个终端。

例如,我在 中~/code/someproject/src/,打开一个新终端,默认情况下,它在 中打开~,如何在当前目录中启动一个新终端?

我正在运行 Arch Linux,以 urxvt 作为终端,以 i3 作为窗口管理器。

答案1

i3-faq 论坛中有一个非常有用的帖子,其中包含解决此问题的各种脚本/程序。

https://faq.i3wm.org/question/150/how-to-launch-a-terminal-from-here/

我选择了 c 程序 xcwd,它确实做得很好。它还可以在 GUI 程序中运行。

答案2

当你从现有终端启动终端时,原始终端的环境将被保留,包括当前工作目录和你设置的任何其他环境变量。这就是urxvt &为什么

答案3

我所见过的所有答案在使用时都不起作用urxvtd,在这种情况下,所有终端窗口都与同一个守护进程相关联urxvtd,并且似乎没有简单的方法来识别正确的 shell 实例以获取 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

答案4

我编写了一个非常非常丑陋的黑客程序来实现这一点。

https://github.com/RichardHum/bin/blob/master/curdirterm

我的主机名是 bulletMaster,我的主目录是 /root/

相关内容