2015-06-10 66 views
2

我有一個用戶定義的命令,稱爲lock。執行該命令後,系統將被鎖定。如果我們只給出正確的密碼,那麼只會發生命令 提示。現在,我想從後臺運行的腳本 執行lock命令。如果我們執行腳本lock命令執行,但它不鎖定當前終端。它只鎖定背景bash。它不會在當前的bash中執行。如何解決這個問題呢?使父進程中的子進程執行shell命令(鎖殼)

謝謝。

+0

你不能。後臺進程沒有任何方法來控制前臺shell。它們是分開的過程。後臺腳本不能在前臺進程中設置變量。 –

+0

因此,無法從子shell執行父shell中的命令。這樣對嗎?謝謝... – Mohan

+0

沒錯。與其他任何兩個過程一樣,它們是完全獨立的過程。 –

回答

0

之前使用調試陷阱從命令提示執行的命令,可以執行命令:

trap 'command' DEBUG 

這將每個命令之前執行命令。系統鎖定後,更改後臺腳本以創建某種標誌文件。並讓你的命令檢查該文件是否存在。像這樣:

if [[ -f lockfile ]] 
then p= 
    while [[ "$p" != secret ]] 
    do echo -n password: 
     read p 
    done 
    rm -f lockfile 
fi 

我不是說它是安全的。

另一種方法:

運行兩個shell。下層shell循環詢問密碼,然後運行上層。上殼是一個正常的殼。當後臺任務想要鎖定終端時,後臺任務會終止上層shell,並將控制權返回給下層shell。

+0

我的要求是:如果我的系統達到1分鐘的空閒時間,「鎖定」命令將自動執行。到目前爲止檢查系統的空閒時間後臺進程將運行。如果達到1分鐘,後臺進程將執行鎖定命令。這是我的要求。 – Mohan

+0

這是一個解決方案,而不是一個要求。一個要求就像「我想在一分鐘後鎖定終端」。你可以在後臺運行鎖定命令,但它永遠不會工作。 – rghome

+0

好的。多謝,夥計。 – Mohan