Решения на основе диалогов в сценариях bash?

Вы не можете интерактивно отвечать на вопросы rm -riс помощью последней команды xargs: объяснение здесь.

Вместо этого вы можете указать список больших каталогов в качестве аргументов для rm -ri:

rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | xargs -I{} sh -c "echo {} | cut -d' ' -f2")

Обратите внимание, что вы можете заменить xargs cutна awk. ] как таковой:

rm -ri $(du -d2 -h ~/Downloads/* | grep -E '[0-9]G' | awk '{print $2}')

Или даже короче:

rm -ri $(du -d2 -h ~/Downloads/* | awk '$1 ~ /G$/ {print $2}')

Также обратите внимание, что приведенные выше команды не будут работать, если в именах файлов есть пробелы.

1
13.03.2016, 16:22
1 ответ

zenity не записывает результат вашего выбора в std-out. Попробуйте сами, запустив его в командной строке:

$ zenity --question
$

Как видите, ничего не отображается, поэтому ваши переменные TEST пусты.

Вместо этого zenity возвращает значение --question в качестве статуса выхода. Это можно посмотреть (в bash) с помощью внутренней переменной $?.

$ zenity --question

Выберите кнопку 'No':

$ echo $?
$ 1

Как объясняется на странице man, 0 означает 'Yes', 1 означает 'No', а 5 означает, что команда завершилась.

Таким образом, ваша команда должна выглядеть так:

$ zenity --question; echo test=$?
$ test=1

Обратите внимание, что разные команды zenity ведут себя по-разному. Как объясняет man-страница, команда --entry действительно отправляет свой вывод в std-out:

$ zenity --entry
$ Test 1..2..3..

Поэтому ваши тесты будут работать с этой конкретной командой.

4
27.01.2020, 23:19

Теги

Похожие вопросы