Bash

從後台恢復作業時切換迴路徑

  • August 23, 2016

假設我打開~/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
}

引用自:https://unix.stackexchange.com/questions/12637