[英]Make file environment variable not taking effect if called from shell script
[英]Shell Script with environment variable
我有一個C程序,結尾處有以下代碼:
memcpy(buff,"TEST=",4)
putenv(buff)
system("/bin/bash")
我在新的shell中放入了新的環境變量。 然后,我想將測試回顯到我可以輕松完成的文本文件中。 然后,我想退出外殼並再次運行它,因此運行如下
./cprog "some arg"
echo $TEST > test.txt
exit
./cprog "some arg"
echo $TEST > test.txt
exit
我必須繼續退出,以便可以更改TEST變量。 我如何才能在shell腳本中完成此工作,以便我可以繼續循環並運行c程序,以便可以更改參數,而從不退出shell腳本本身。
環境變量不是將信息從流程傳遞給用戶或調用流程的適當方法。 您應該將此信息寫入stdout(將其他任何信息寫入stderr)並適當地重定向。
如果您堅持使用此解決方案,則可以使用
for p in "one arg" "another arg" "more"
do
echo 'printf "%s\n" "$TEST" >> test.txt' | ./cprog "$p"
done
這將輸入命令以將變量寫入文件到程序中,然后退出外殼程序(因為輸入結束)。
最后,您將在文件test.txt
連接所有$TEST
的值。
您的程序不可能更改父進程的環境,這似乎是您試圖做的。
但是,您可以做的是讓您的程序僅打印所需的輸出,然后使用eval
調用。
$ ./cprog "wibble" TEST=wibble $ eval `./cprog "wibble"` $ echo ""TEST\\" is now equal to \\"$TEST\\"" "TEST" is now equal to "wibble" $
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.