Intereting Posts
OpenSSL s_client не обнаруживает STARTTLS gzip: неожиданный конец файла с – как читать файл в любом случае Найдите файлы с определенным форматом файлов, коту, каждый с файлом заголовка, и сохраните результат в исходный файл для каждого такого файла Получить полный байт, отправленный pid Устранение уставок Xmonad по умолчанию: какова конфигурация будущих доказательств? Требуется уточнение apt_preferences awk + как добавить список в файл Найти использование дискового пространства в каталоге и всех его файлов vsftp не поддерживает настройку chmod при загрузке вне моей локальной сети Где исполняемые файлы ищут общие объекты во время выполнения? как использовать avconv для записи потокового аудио (как определить источники)? Некоторые приложения бросают ошибки GTK + Скопируйте каталог на внешний жесткий диск Загрузите только часть файла Как автоматически включить горячую точку?

Как использовать kdialog progressbar из сценария Bash, когда панель была инициализирована в другом скрипте?

Вот пример того, как использовать kdialog progressbar. Оно работает.

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 '' 53 Path '' не является допустимым именем пути.

Код для обновления панели прогресса точно такой же, как и во втором файле сценария. В общем, это так:

 qdbus $dbusRef Set "" value "$PROGRESS" 

Очевидно, что некоторые значения переменных не передаются. Но ни один из уроков, которые я видел, не объясняет переменные. Например, что такое value ? Что такое $dbusRef ?

Короче говоря, как мне обновить один и тот же индикатор производительности из второго файла сценария bash, который вызывается первым?

Вы забыли опубликовать оба сценария. Но, учитывая ваше описание, похоже, что вы устанавливаете переменную dbusRef в один сценарий оболочки и 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"