Volta para o caminho quando retoma o trabalho do fundo

2

Digamos que eu abra ~/vim.txt , envie para o segundo plano e, em seguida, cd para outro caminho. Quando eu trago esse trabalho para primeiro plano, existe uma opção para voltar ao caminho antigo? Eu notei que diz pwd , então presumo que seja possível.

    
por sent-hil 02.05.2011 / 08:42

1 resposta

5

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
}
    
por 03.05.2011 / 01:28