在运行时从 unix 后台进程捕获 `pwd`

capture `pwd` from unix background process at runtime

我的终端后台有一个 shell 脚本 运行:-

#!/bin/bash
while true ;
do
var=`pwd`
echo $var
sleep 3;
done

当前工作目录是

/home/mydir/

尝试通过

调用脚本
./test.sh &
/home/mydir/test.sh &
bash /home/mydir/test.sh &

控制台上的输出是

/home/mydir/

在同一个终端会话上,如果我这样做 cd /home/mydir/myinnerdir。那么输出应该是 /home/mydir/myinnerdir 。但是是/home/mydir/

要实现的目标:- 如果我将 pwd 更改为另一个目录,后台进程应该捕获这个更改后的目录。从上面 shell 它不能。怎么做?谢谢

问题是工作目录是一个进程的私事,所以当你改变交互的工作目录时shell,后台(打印)的工作目录shell不会'改变。

在 Linux 上(至少)使用 bash 你可以这样做:

bash -c 'while sleep 3; do readlink -e /proc/$PPID/cwd; done' &

/proc/123/cwd 是 PID 为 123 的进程的工作目录的虚拟符号 link。)