2017-03-03 52 views
1

我有一个shell脚本在后台我的终端上运行: -捕获`从UNIX后台进程pwd`在运行时

#!/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。但它是/家/ MYDIR/

实现的目标: - 如果我改变我的pwd到另一个目录,后台进程应该抓住这个变化的目录。从上面的外壳它不能够。怎么做?谢谢

+0

检查,如果你的任何别名与myinnerdir在您的家庭目录中使用以下 - ls -ltr myinnerdir在您的家庭目录中。 –

回答

2

问题是工作目录是一个进程的私人问题,所以当您更改交互式shell的工作目录时,背景(打印)shell的工作目录不会更改。

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

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

/proc/123/cwd是一个虚拟的符号链接的过程中与PID 123的工作目录)

+1

谢谢,它解决了我的问题 – syadav

+0

这种方法适用于Cygwin,但不适用于Linux服务器。 'a = readlink -e/proc/$ PPID/cwd;'echo $ a返回null。 – syadav

+0

@syadav'a = \'readlink -e/proc/$ PPID/cwd \''(带反引号)。它适用于我的Linux机器(内核3.16.0-4-amd64,Debian 8.7)。 –