![当进度条在另一个脚本中初始化时,如何从 Bash 脚本使用 kdialog 进度条?](https://linux22.com/image/45014/%E5%BD%93%E8%BF%9B%E5%BA%A6%E6%9D%A1%E5%9C%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%88%9D%E5%A7%8B%E5%8C%96%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BB%8E%20Bash%20%E8%84%9A%E6%9C%AC%E4%BD%BF%E7%94%A8%20kdialog%20%E8%BF%9B%E5%BA%A6%E6%9D%A1%EF%BC%9F.png)
以下是如何使用 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"