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

ただし、メインスクリプトファイルが2番目のスクリプトファイルを呼び出すときにどのように機能するかはわかりません。 2番目のスクリプトで同じ進行状況バーを更新し続けたいと思います。

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

  • qdbus 'value 53 path'設定は有効なパス名ではありません。

進行状況バーを更新する2番目のスクリプトファイルのコードは、最初のコードとまったく同じです。一般的に言えば、

qdbus $dbusRef Set "" value "$PROGRESS"

明らかに、いくつかの変数値は渡されません。しかし、私が見たチュートリアルの中で、これらの変数を説明するチュートリアルはありません。たとえば、何ですかvalue?何ですか$dbusRef

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

答え1

2つのスクリプトを投稿するのを忘れました。しかし、あなたの説明によれば、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"

関連情報