1

我的终端在后台运行了一个 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为另一个目录,后台进程应该捕获这个更改的目录。从上面的外壳是无法做到的。怎么做?谢谢

4

1 回答 1

3

问题是工作目录是进程的私人事务,因此当您更改交互式 shell 的工作目录时,后台(打印)shell 的工作目录不会改变。

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

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

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

于 2017-03-03T08:59:03.723 回答