Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在运行时从unix后台进程捕获“pwd”_Shell_Unix_Pwd - Fatal编程技术网

Shell 在运行时从unix后台进程捕获“pwd”

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

我有一个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的工作目录时,后台(打印)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。@syadav
a=`readlink-e/proc/$PPID/cwd`
(带反勾号)。它在我的Linux机器上工作(内核3.16.0-4-amd64,Debian8.7)。