2010-11-15 53 views
2

我有兩個文件調用a_file和b_file。我正在嘗試寫入a_file,以便它可以更改b_file中的變量。UNIX,如何從另一個文件更改腳本文件?

echo "This is a_file" 
echo "Enter x to display msg1 or y to display msg2" 
read input 

echo "This is b_file" 
if [ "$var1" = "x" ]; then 
    echo "message 1" 
else 
    echo "message 2" 
fi 

你能告訴我怎麼能操縱變量var1從a_file?


這是對khachik的答案的更新。這很清楚。但是如果我想在第一次執行a_file後每分鐘運行一次b_file, (crontab)我應該如下編寫它。

echo "This is a_file" 
echo "Enter x to display msg1 or y to display msg2" 
read x 
* * * * * ./b_file "$x" 

echo "This is b_file" 
if [ "$1" = "x" ]; then 
    echo "message 1" 
else 
    echo "message 2" 
fi 
+0

你試圖解決什麼問題? http://www.perlmonks.org/index.pl?node_id=542341 – Johnsyweb 2010-11-15 07:43:30

回答

2

的最好方法是在命令行中傳遞參數:

echo "This is a_file" 
echo "Enter x to display msg1 or y to display msg2" 
read x 
./b_file "$x" 

echo "This is b_file" 
if [ "$1" = "x" ] 
    echo "message 1" 
else 
    echo "message 2" 
fi 

關於modifiying:您可以使用sed修改b_filecat b_file | sed "s/\\\$var/$x/g"

+0

非常感謝您的詳細解釋。現在我明白它是如何工作的。但是如果您想每分鐘執行一次b_file(僅執行一次a_file之後),那該怎麼辦?在a_file的最後一行,我是否應該輸入* * * * ./b_file「$ x」請讓我知道如何讓它在每分鐘運行一次。非常感謝。 – HelloWorld 2010-11-15 08:22:24

+0

您可以使用crontab每分鐘運行一次命令。但'read'應該從一個文件中讀取,'echo'應該被重定向到一個文件,否則它會發送一封電子郵件。我可以問你想做什麼? – khachik 2010-11-15 08:32:30

+0

我只想在一個文件中獲得來自用戶的輸入(第一個文件應該只執行一次),然後根據用戶的輸入,我的第二個文件應該每隔一小時左右運行一次。你回答了我的大部分問題。但不知道如何告訴它在執行一次a_file後運行第二個文件。請看我原來的問題,我已經更新了。非常感謝你的幫助。 – HelloWorld 2010-11-15 08:40:44

2

可以使用環境變量。在a_file,輸出變量var:

export var="Some_value" 

在b_file,你可以用它喜歡:

echo $var 

但是,你需要源shell腳本a_file像:

source a_file 

我假設你在使用shell腳本。

+0

我瞭解export var =「some_value」部分。你能解釋一下你會在哪裏放置命令'source a_file'? – 2010-11-15 10:34:46

+0

@NewGuy:在shell提示符下,執行第一個腳本作爲「source a_file」。然後,您可以執行第二個腳本作爲「./b_file」。以「./a_file」執行第一個腳本不會導出變量。所以,第二個腳本不會看到它的價值。 – Khaled 2010-11-15 10:44:41

0

您可以使用函數並在調用函數的文件中包含帶有函數定義的文件。這些函數可以接受參數。從閱讀this documentation開始,在bash中編寫函數。

相關問題