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

时间:2017-03-03 08:43:10

标签: shell unix pwd

我的终端在后台运行了一个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它是不能的。怎么做?感谢

1 个答案:

答案 0 :(得分:3)

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

在Linux(至少)上使用bash,您可以执行此操作:

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

/proc/123/cwd是使用PID 123进程的工作目录的虚拟符号链接。)