진행률 표시줄이 다른 스크립트에서 초기화될 때 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 '값 53 경로' 설정은 유효한 경로 이름이 아닙니다.

진행률 표시줄을 업데이트하는 두 번째 스크립트 파일의 코드는 첫 번째 코드와 정확히 동일합니다. 일반적으로 말하면 다음과 같습니다.

qdbus $dbusRef Set "" value "$PROGRESS"

분명히 일부 변수 값이 전달되지 않습니다. 그러나 내가 본 튜토리얼 중 이러한 변수를 설명하는 튜토리얼은 없습니다. 예를 들어, 무엇입니까 value? 무엇인가요 $dbusRef?

즉, 첫 번째 bash 스크립트 파일에서 호출된 두 번째 bash 스크립트 파일에서 동일한 진행률 표시줄을 어떻게 업데이트합니까?

답변1

두 개의 스크립트를 게시하는 것을 잊었습니다. 하지만 귀하의 설명에 따르면 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"

관련 정보