sen*_*hil 2 bash zsh directory cd-command background-process
假设我打开~/vim.txt,将其推到后台,然后推cd到另一条路径。当我将该工作置于前台时,是否可以选择切换回旧路径?我注意到它说pwd,所以我认为这是可能的。
这在 zsh 中是可能的,实际上这很容易,这要归功于zsh/parameter 模块提供的对作业参数的直接访问。你可以使用一个作业号或任何作业规范(%+,%-,%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
}
Run Code Online (Sandbox Code Playgroud)
Bash 还跟踪信息,但我认为它没有暴露。在某些系统上,您可以获得作业进程的当前工作目录,并切换到该目录。例如,在 Linux 上,/proc/$pid/cwd是指向该进程工作目录的符号链接。
fgcd () { # Linux only
local pid=$(jobs -p $1)
if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
fg $1
}
Run Code Online (Sandbox Code Playgroud)
由于它也很有用,这里有一个 zsh 版本。与上面的功能切换到作业的原始目录不同,这个功能切换到作业的进程领导者的当前工作目录。
fgcd () { # Linux only
local pid=${${${jobstates[${1:-%+}]}#*:*:}%\=*}
if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
fg $1
}
Run Code Online (Sandbox Code Playgroud)