1
我寫了一個簡單的腳本來wget和zenity會被取消:Zenity不會取消或顯示消息,因爲它沒有看到變量
#!/bin/bash
((
wget http://d3qnbzt7ix5jlv.cloudfront.net/ubuntu-12.04-desktop-i386.iso & export PID=$$
wait $PID
export YES=$?
)&) | zenity --progress --pulsate --auto-close
if [ $? -eq 1 ]; then
kill $PID
fi
if [ "$YES" = "0" ]; then
zenity --info
elif [ "$YES" = "1" ]; then
zenity --error
fi
殺不看過程$ PID。 Zenity不顯示最終窗口($ YES)。爲什麼?
你正在創建了兩個子shell即「(」第一子shell,「(」第二子shell在腳本中的第一個2個字符沒有孩子。進程可以改變這個值或者在父進程中創建一個變量,對於shell也是如此,你可以在父進程中傳回一個賦值的值,即YES = $(wget ...),但是因爲你想管道可能有辦法複製輸出或使用'exec 4>&1'類型的符號爲每個進程重新分配標準輸入,但我沒有時間弄清楚它的含義你的第一句話結尾不清楚,祝你好運 – shellter
我想讓shell從子shell $讀取!和$ ?. – user1365064
設置了一些簡單的測試,忽略管道到zenity,你會發現你不能改變subshell之間的變量值,你只能'通過cmd-substitution''返回'值,即'var = $(printf 「價值\ n」)'祝你好運。 – shellter