← All posts tagged shell

anton0xf
PDF Ubuntu Linux shell В который раз сталкиваюсь с тем, что в книжке (в pdf) нет встроенного оглавления, а оно нужно. Каждый раз в итоге я его собираю в закладках evince, а потом не знаю, как его перенести вместе с файлом или, ещё лучше, сделать из него настоящее оглавление. В этот раз я таки погуглил и узнал две вещи:
1. evince хранит закладки в метадате GVFS, откуда их можно сдампить в файл и принести куда надо (источник)
2. можно довольно легко добавить к pdf оглавление, если уже есть страницы и заголовки, с помощью pdftk

В итоге, за час-полтора ковыряния в гугле и шеле, собрал с помощью седа, awk, pdftk и такой то матери себе из кучи закладок няшное оглавление к книжке.

Как делал: gist.github.com

Не думаю, что это реюзабельно непосредственно, т.к. тут половина кода — это преобразование формата, в котором я называл букмарки. Типа было "145 — 11.5 Chapter", а надо было отрезать страницу и сделать из этого подзаголовок второго уровня.

Натолкнулся по дороге на два нюанса:
1. pdftk нет в репках Убунты, но есть snap
2. страницы в pdftk на 1 больше, чем во внутреннем представлении закладок evince

Ещё я так и не нашёл (хотя искал не долго), в каком конкретно формате хранится мета в GVFS (вроде похоже на YAML, но хз), и распарсил седом, как пришлось.

anton0xf
code Linux nya shell less
СЯУ, что так можно и что я всегда такое хотел: [подсветка синтаксиса всякой фигни при просмотре в less][https://www.gnu.org/software/src-highlite/source-highlight.html#Using-source_002dhighlight-with-less]. 

Правда оно как-то не очень хочет работать совместно с lesspipe, так что я пока так сделал (вместо рекомендованного способа):
> alias hi='src-hilite-lesspipe.sh'
> lesshi() {
>    src-hilite-lesspipe.sh "$@" | less
> }

Там ещё есть вариант его в ~/.lessfilter прописать (его вызывает lesspipe), но что-то оно сходу не завелось.
anton0xf
Linux shell tip если нужно что-то сделать с текстом разукрашенным с помощью *ANSI escape кодов* (выкинуть их нафиг, или сделать текст пригодным для просмотра чем-то кроме less), то может пригодится утилка ansifilter (app-text/ansifilter в gentoo).
Умеет конвертить в text, (La)TeX, html и rtf
anton0xf
Linux shell ? хочу запилить себе утилиту навроде cat (т.е. печатающую весь свой ввод (получаемый из пайпа)), которая бы по хоткею (например Ctrl+T) печатала чтонибудь в свой вывод (например цветной вывод date --rfc-3339=seconds).
и не могу придумать как это сделать(
яхз, как читать с клавы, когда используется перенаправление (less как-то это делает, но я не понимаю в ее исходники)
думал заюзать сигналы, но из коробки можно передавать с клавы только stop, interrupt и quit, и они все не очень подходят, а как передать например SIGUSR1 — яхз.
anton0xf
Linux shell ? Zsh у dirs есть опция -p, которая заставляет его печатать стек в столбик, а не в строчку. чтобы она всегда так делала можно добавить алиас.
но как научить pushd/popd делать так-же после выполнения?
anton0xf
Linux shell tip cp допустим хотите вы переместить все содержимое dir1 внутрь dir2.

попытка 1:
$ cp -rv /path/to/dir1 /path/to/dir2
плучаем подпапку dir1 в папке dir2 :(

попытка 2:
$ cp -rv /path/to/dir1/* /path/to/dir2
уже лучше, но папки и файлы с именами, начинающимися с точки, не скопировались :(

попытка 3:
$ man cp
$ cp -rvT /path/to/dir1 /path/to/dir2
SUCCESS!!! :)
anton0xf
hack Linux shell нагуглил случано отличный хак.

преамбула:
довольно часто случается что нужно провести с файлом какую-то операцию и заменить его ее выводом.
что-нибудь типа
# < file sed '..' | .. | sort > file
но в таком виде файл просто затрется еще до начала преобразования. и поэтому обычно используют промежуточный файл для хранения вывода
# < file commands > file.tmp && mv file.tmp file

недостатки понятны: лишний файл; нужно следить за именами файлов в текущей папке, чтобы не затереть случайно нужный (или использовать tempfile, что не упрощает решение); ну и вообще, как-то костыльно

и, собсно, найденное решение:
# < file { rm file && commands > file }
т.е. сначала открывается файловый дескриптор, потом удаляется файл, но дескриптор остается открытым, пока команды в {} не отработают и, наконец, "> file" создает новый файл с тем же именем

не идеал, но уже гораздо лучше)
anton0xf
sed Linux shell как сделать вот такое?:
sed -i '0r file1' file2
и почему так оно не работает?
(кажется, что где-то это уже обсуждали, но не могу вспомнить)
anton0xf
Linux Gentoo shell долго не мог понять, почему эта конструкция выдает 0:
.. | xargs qlop -t | awk '{sum += $2}; END {print sum}'
успел перечитать прилично мана по awk, предже чем сообразил, что вывод qlop — цветной (!)
(qlop — это такая гентовая утила для анализа лога emerge. в частности, -t говорит, сколько времени обычно пакет собирается)