다음은 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"