假设我打开~/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
}