2017-03-03 83 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)。 –