Shell 在运行时从unix后台进程捕获“pwd”
我有一个shell脚本在终端后台运行:-Shell 在运行时从unix后台进程捕获“pwd”,shell,unix,pwd,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/myinnerdi
#!/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的工作目录不会更改
在Linux上(至少)使用bash
可以执行以下操作:
bash -c 'while sleep 3; do readlink -e /proc/$PPID/cwd; done' &
(
/proc/123/cwd
是一个指向进程的工作目录的虚拟符号链接,使用PID 123。)在home dir中使用lower-ls-ltr myinnerdir检查home dir中是否有myinnerdir
的别名。这种方法适用于Cygwin,但不适用于Linux服务器a=readlink-e/proc/$PPID/cwd
echo$a返回null。@syadava=`readlink-e/proc/$PPID/cwd`
(带反勾号)。它在我的Linux机器上工作(内核3.16.0-4-amd64,Debian8.7)。