我的终端在后台运行了一个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它是不能的。怎么做?感谢
答案 0 :(得分:3)
问题是工作目录是进程的私事,所以当你更改交互式shell的工作目录时,后台(打印)shell的工作目录不会改变。
在Linux(至少)上使用bash
,您可以执行此操作:
bash -c 'while sleep 3; do readlink -e /proc/$PPID/cwd; done' &
(/proc/123/cwd
是使用PID 123进程的工作目录的虚拟符号链接。)