バックグラウンドでタスクを再開すると、パスに戻ります

バックグラウンドでタスクを再開すると、パスに戻ります

~/vim.txt私がそれを開き、バックグラウンドにプッシュしてからcd別のパスにプッシュすると仮定します。これをフォアグラウンドにインポートするときに前のパスに戻すオプションはありますか?と書かれているのを見て、pwdそれが可能だと思いました。

ベストアンサー1

これはzshで可能です。実際には、zshが提供するジョブパラメータに直接アクセスできるので簡単です。zsh/パラメータモジュール。ジョブ番号またはジョブ仕様(など)を配列の下付き文字として使用%+でき%-ます%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
}

おすすめ記事