Bash

當欄在另一個腳本中初始化時,如何使用 Bash 腳本中的 kdialog 進度條?

  • July 19, 2013

這是一個如何使用 kdialog 進度條的範例。有用。

dbusRef=`kdialog --progressbar "Press Cancel at Any time" 10`
qdbus $dbusRef showCancelButton true

until test "true" = `qdbus $dbusRef wasCancelled`; do
sleep 1
inc=$((`qdbus $dbusRef Get "" "value"` + 1))
qdbus $dbusRef Set "" "value" $inc;
done

qdbus $dbusRef close

但是,當主腳本文件呼叫第二個腳本文件時,我不知道如何使它工作。我想從第二個腳本繼續更新相同的進度條。

錯誤是:

  • qdbus Set ’’ value 53 Path ’’ 不是有效的路徑名。

第二個腳本文件中更新進度條的程式碼與第一個完全相同。一般來說,它是這樣的:

qdbus $dbusRef Set "" value "$PROGRESS"

顯然,一些變數值沒有被傳遞。但是我見過的教程都沒有解釋這些變數。例如,什麼是value?是什麼$dbusRef

簡而言之,如何從第一個呼叫的第二個 bash 腳本文件更新相同的進度條?

您忘記發布兩個腳本。但是根據您的描述,您似乎是dbusRef在一個 shell 腳本中設置變數,並在另一個腳本中訪問它。這不起作用,因為每個 shell 都有自己的一組變數。您需要將變數從呼叫腳本傳遞給被呼叫腳本。

一種簡單的方法是將變數轉換為環境變數。您可以使用export內置函式執行此操作。在呼叫者中:

export dbusRef="$(kdialog --progressbar "Press Cancel at Any time" 10)"
…
some_other_program_that_happens_to_also_be_a_shell_script

在被呼叫的腳本中:

PROGRESS='something or other'
qdbus "$dbusRef" Set "" value "$PROGRESS"

或者,export您可以使用任何您喜歡的方法來傳遞資訊,例如命令行參數,而不是使用。

dbusRef="$(kdialog --progressbar "Press Cancel at Any time" 10)"
…
some_other_program_that_happens_to_also_be_a_shell_script argument1 argument2 "$dbusRef" argument4

並在被呼叫的腳本中:

PROGRESS='something or other'
qdbus "$3" Set "" value "$PROGRESS"

引用自:https://unix.stackexchange.com/questions/82937