web-dev-qa-db-ja.com

バーが別のスクリプトで初期化されたときに、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

ただし、メインスクリプトファイルが2番目のスクリプトファイルを呼び出すときに、それを機能させる方法がわかりません。 2番目のスクリプトから同じプログレスバーを更新し続けたいと思います。

エラーは次のとおりです。

  • qdbus Set '' value 53 Path ''は有効なパス名ではありません。

プログレスバーを更新するコードは、2番目のスクリプトファイルでも最初のスクリプトファイルとまったく同じです。一般的に、それはこれです:

qdbus $dbusRef Set "" value "$PROGRESS"

明らかに、一部の変数値は渡されていません。しかし、私が見たチュートリアルのどれも変数を説明していません。たとえば、valueとは何ですか?とは $dbusRef

要するに、最初に呼び出された2番目のbashスクリプトファイルから同じプログレスバーを更新するにはどうすればよいですか?

1
MountainX

両方のスクリプトを投稿するのを忘れました。しかし、説明を考えると、あるシェルスクリプトで変数dbusRefを設定し、別のスクリプトでそれにアクセスしているように見えます。各シェルには独自の変数セットがあるため、これは機能しません。呼び出し元のスクリプトから呼び出されたスクリプトに変数を渡す必要があります。

これを行う簡単な方法は、変数を環境変数に変えることです。これは、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"