在运行时从 unix 后台进程捕获 `pwd`
capture `pwd` from unix background process at runtime
我的终端后台有一个 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,后台(打印)的工作目录shell不会'改变。
在 Linux 上(至少)使用 bash
你可以这样做:
bash -c 'while sleep 3; do readlink -e /proc/$PPID/cwd; done' &
(/proc/123/cwd
是 PID 为 123 的进程的工作目录的虚拟符号 link。)
我的终端后台有一个 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,后台(打印)的工作目录shell不会'改变。
在 Linux 上(至少)使用 bash
你可以这样做:
bash -c 'while sleep 3; do readlink -e /proc/$PPID/cwd; done' &
(/proc/123/cwd
是 PID 为 123 的进程的工作目录的虚拟符号 link。)