Isso é possível em zsh, e de fato é fácil graças ao acesso direto aos parâmetros de trabalho fornecidos pelo módulo zsh / parameter . Você pode usar um número de trabalho ou qualquer especificação de trabalho ( %+
, %-
, %foo
, etc.) como um subscrito na matriz.
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
}
O Bash também acompanha as informações, mas não acho que esteja exposto. Em alguns sistemas, você pode obter o diretório de trabalho atual do processo do job e alternar para ele. Por exemplo, no Linux, /proc/$pid/cwd
é um link simbólico para o diretório de trabalho desse processo.
fgcd () { # Linux only
local pid=$(jobs -p $1)
if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
fg $1
}
Como também pode ser útil, aqui está uma versão do zsh. Ao contrário da função acima, que muda para o diretório original do trabalho, este alterna para o diretório de trabalho atual do líder do processo do trabalho.
fgcd () { # Linux only
local pid=${${${jobstates[${1:-%+}]}#*:*:}%\=*}
if [[ -n $pid ]]; then cd /proc/$pid/cwd; fi
fg $1
}