从后台恢复作业时切换回路径

从后台恢复作业时切换回路径

假设我打开~/vim.txt,将其推到后台,然后cd推到另一条路径。当我将该作业带到前台时,是否可以选择切换回旧路径?我注意到它说pwd,所以我认为这是可能的。

答案1

这在 zsh 中是可能的,事实上,由于可以直接访问由 zsh 提供的作业参数,这很容易zsh/参数模块。您可以使用作业编号或任何作业规范(%+%-%foo等)作为数组中的下标。

zmodload zsh/parameter
fgcd () {
  local dir=$jobdirs[${1:-%+}]
  # If the jobspec matched, then call cd. Otherwise it's probably a bad
  # job spec, but call fg anyway to get the usual error message.
  if [[ -n $dir ]]; then cd $dir; fi
  fg $1
}

Bash 也会跟踪这些信息,但我认为它不会暴露。在某些系统上,您可以获得作业进程的当前工作目录,并切换到该目录。例如,在 Linux 上,/proc/$pid/cwd是指向该进程工作目录的符号链接。

fgcd () { # Linux only
  local pid=$(jobs -p $1)
  if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
  fg $1
}

因为它也很有用,所以这里有一个 zsh 版本。与上面切换到作业的原始目录的函数不同,此函数切换到作业进程领导者的当前工作目录。

fgcd () { # Linux only
  local pid=${${${jobstates[${1:-%+}]}#*:*:}%\=*}
  if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
  fg $1
}

相关内容