当进度条在另一个脚本中初始化时,如何从 Bash 脚本使用 kdialog 进度条?

当进度条在另一个脚本中初始化时,如何从 Bash 脚本使用 kdialog 进度条?

以下是如何使用 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 路径 '' 不是有效的路径名。

第二个脚本文件中更新进度条的代码与第一个完全相同。一般来说,它是这样的:

qdbus $dbusRef Set "" value "$PROGRESS"

显然,某些变量值没有被传递。但我见过的教程都没有解释这些变量。例如,什么是value?什么是$dbusRef

简而言之,如何从第一个 bash 脚本文件调用的第二个 bash 脚本文件更新相同的进度条?

答案1

您忘记发布两个脚本。但根据您的描述,您似乎正在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"

相关内容