Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


среда, 18 мая 2016 г.

bash: цикл по именам файлов с пробелами

Цикл FOR по списку в bash работает хорошо. До тех пор, пока внутри элементов списка не появляются пробелы - вместе с пробелами появляются и проблемы: каждое слово в составе элемента списка рассматривается отдельно, и если попадается файл вроде "цикл не работает", то for будет выполнен для него три раза - для "цикл", для "не" и для "работает", что не есть хорошо.

Понадобилось мне сконвертировать несколько файлов из png в jpg. И как раз наступил на упомянутые грабли (имена файлов настоящие и опечатки в слове "внутренний" нет):

$ for a in `ls -Q litb\ внтуренний\ счет*.png`; do echo "$a"; done
"litb
внтуренний
счет2.png"
"litb
внтуренний
счет.png"

среда, 4 мая 2016 г.

Пауза в bash-скриптах

К моему удивлению, штатной "паузы", подобной команде pause в языке пакетных файлов DOS в bash не обнаружилось. Но это было бы не труЪ, если бы ее нельзя было придумать.

http://www.cyberciti.biz/tips/linux-unix-pause-command.html

Два  основных решения:

1. Не совсем пауза: будет ждать именно нажатия ENTER

read -p "Нажмите ВВОД для продолжения"

2. Ближе к древнему оригиналу:

read -n 1 -p "Нажмите любую клавишу для продолжения..."

3. Комбинированное решение:

read -n 1 -t 5 -p "Нажмите любую клавишу или подождите 5 секунд для продолжения..."

4. труЪ

#!/bin/bash
# init
function pause(){
   read -p "$*"
}
 
# ...
# call it
pause 'Press [Enter] key to continue...'