Bash
從後台恢復作業時切換迴路徑
假設我打開
~/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 }
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 }