Полезные советы и скрипты (упрощающие работу в консоли)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19622
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

olecya писала:
14.12.2020 11:21
Не все знают что в утилите ls есть опция игнорирования файлов по шаблону.
Тут неплохо бы уточнить, что она есть только в GNU ls. В POSIX такой опции нет, а в ls из FreeBSD, например, флаг -I имеет другое значение.
olecya писала:
14.12.2020 11:21
Обычно мы не замарачиваясь используем конвеер, например:

Shell

touch file{1,2}.txt
ls
file2.txt file3.txt file.txt
ls | grep -v '[0-9]'
file.txt
Для незаморочных, которые грепают вывод ls, у меня всегда наготове такой пример:

Shell

% ls
% touch 'file
quote> 1.txt'
% ls
'file'$'\n''1.txt'
% ls | grep -v '[0-9]'
file
%
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 734
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Выводим массив в обратном порядке.
В данном примере зеркальное отражение массива имеющего ограничение по максимальному числу передаваемых параметров:

Shell

arr=(1 2 3 4 5 6)
bash -c '$0 $@ ${BASH_ARGV[@]}' echo ${arr[@]}
1 2 3 4 5 6 6 5 4 3 2 1
В скрипте также можно вывести полученные параметры через массив BASH_ARGV
А вот если вывести из функции то необходимо включить перед передачей опцию:
shopt -s extdebug
P.S. Буквально вчера с этим экспериментировала, поэтому могла где нить накосячить.
Спасибо сказали:
Аватара пользователя
Zer0
Сообщения: 415
ОС: Void, Slackware

Re: Полезные советы и скрипты

Сообщение Zer0 »

Чтобы не изобретать велосипеды:

- набор полезных скриптов bash для кучи типовых задач;
https://github.com/dylanaraps/pure-bash-bible

- примерно тоже самое, но только одной строкой;
https://linuxcommandlibrary.com/basic/oneliners.html
Memento mori ... сделай бэкап.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19622
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

Zer0 писал(а):
09.06.2021 11:47
примерно тоже самое, но только одной строкой;
https://linuxcommandlibrary.com/basic/oneliners.html
Там преимущественно треш.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 734
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Псевдоним vi для автоматического открытия файла сессии:[не правильно!]
Есть варианты с созданием файлов сессий в отдельной директории с именами проектов. По мне это довольно неудобно. У меня было организованно так. В корне проекта создается дефолтный файл сессии Session.vim и в дальнейшем открывается просто командой vim -S. Для меня редактор вим вездеход, открываю как отдельные файлы, без файлов, так и в проектах с файлом сессии где файлы открыты в табах. Довольно неудобно набирать vim -S принимая во внимание еще, что флаг вводится в верхнем регистре. В дополнение, совершенно не пользуюсь командой vi и решила это скомбинировать.

Код: Выделить всё

alias vi='[ $# -eq 0 -a -f Session.vim ] && vim -S || vim'
Теперь команда vi открывает файл сессии если он существует в текущей директории, если нет открывается пустой буфер редактора без получения ошибки об отсутствии файла сессии. Кроме того в корне проекта открываются любые файлы вне сохраненной сессии если у команды vi есть параметры.
Последний раз редактировалось olecya 18.06.2022 14:06, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 734
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Да, тут я конечно накосячила, умудрилась передать параметр в синоним.

Код: Выделить всё

vi() {
        [ $# -eq 0 -a -f Session.vim ] && vim -S || vim -p $@
}
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 734
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Недавно я шутки ради написала имя функции в кириллице и она сработала.

Shell

$ Функция() { echo hi; }
$ Функция
$ hi
Я наивно полагала что имена функций должны составляться так же как и имена переменных. Я еще не копала глубоко, но думаю это как то может быть полезным, в любом случае это интересно.

Shell

$ 10() { echo continue; }
$ 10
$ continue
$ ,() { echo это запятая; }
$ ,
$ это запятая
И даже некоторые операторы можно использовать:

Shell

$ =() { echo bye; }
$ =
$ bye
Спасибо сказали:
Аватара пользователя
algri14
Сообщения: 1065
ОС: Mageia 5.1 & 8 x86_64, KDE

Re: Полезные советы и скрипты

Сообщение algri14 »

Подскажите, можно ли в выводе команд консоли/терминала показать номера строк?
Не из файла, а только в самой консоли, настройки есть?
Про вывод из текстового файла знаю, но есть например команда от утилиты dnf
dnf list kernel*
вывод большой, пронумеровать можно? (без вывода в файл и обратно в консоль)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19622
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

algri14 писал:
21.11.2022 23:54
dnf list kernel*
вывод большой, пронумеровать можно?
dnf list kernel\* | cat -n
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2174
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение ormorph »

wc -l, если нужно просто подсчитать строки.
Спасибо сказали:
Аватара пользователя
algri14
Сообщения: 1065
ОС: Mageia 5.1 & 8 x86_64, KDE

Re: Полезные советы и скрипты

Сообщение algri14 »

Bizdelnick писал:
22.11.2022 00:47
dnf list kernel\* | cat -n
Спасибо, уже хорошо. А для чего обратная косая слеш? без неё выдаёт всё тоже самое.
Добавка в виде | cat -n хорошо работает в

Shell

rpm -qa | grep kernel | cat -n
1 kernel-userspace-headers-5.19.7-1.mga8
2 kernel-desktop-devel-5.19.7-1.mga8-1-1.mga8
3 kernel-desktop-5.10.16-1.mga8-1-1.mga8
а в dnf нумеруются ненужные текстовые строки

Shell

dnf list kernel* | cat -n
1 Последняя проверка окончания срока действия метаданных: 1 day, 8:13:35 назад, Вс 20 ноя 2022 20:41:22.
2 Установленные пакеты
3 kernel-desktop-5.10.16-1.mga8.x86_64 1-1.mga8 @System
...............................................
12 kernel-userspace-headers.x86_64 5.19.7-1.mga8 @System
13 Имеющиеся пакеты
14 kernel-desktop-5.10.19-1.mga8.x86_64 1-1.mga8 updates-x86_64
15 kernel-desktop-5.10.20-2.mga8.x86_64 1-1.mga8 updates-x86_64
от их нумерации похоже не избавиться, направление понял, попробую ещё поиграться с утилитой nl
И можно пояснить механику | cat -n ? в смысле как она нумерует терминал (про саму команду читал)
Добавлено (05:27):
ormorph писал(а):
22.11.2022 04:58
wc -l, если нужно просто подсчитать строки.
В некоторых случаях тоже пригодится, спасибо

Shell

dnf list kernel* | wc -l
481
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2174
ОС: Gentoo

Re: Полезные советы и скрипты

Сообщение ormorph »

algri14 писал:
22.11.2022 05:21
И можно пояснить механику | cat -n ? в смысле как она нумерует терминал (про саму команду читал)
Так по моему тут всё просто, номер + строка + символ LF(0x0A).
Разделителем строк является символ код которого соответствует шестнадцатеричному значению 0x0A.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19622
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

algri14 писал:
22.11.2022 05:21
А для чего обратная косая слеш? без неё выдаёт всё тоже самое.
А Вы попробуйте сделать touch kernel123 и повторить.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19622
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

algri14 писал:
22.11.2022 05:21
И можно пояснить механику | cat -n ? в смысле как она нумерует терминал (про саму команду читал)
| перенаправляет поток стандартного вывода dnf в поток стандартного ввода cat. Поскольку cat не передано ни одного файла в качестве аргумента, он выполняет чтение из потока стандартного ввода. После чего выводит, добавляя номера строк (за что отвечает опция -n).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19622
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Полезные советы и скрипты

Сообщение Bizdelnick »

algri14 писал:
22.11.2022 05:21
попробую ещё поиграться с утилитой nl
Да, cat -n можно заменить на nl, результат будет тот же. Просто я про неё не вспомнил.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 734
ОС: debian, fedora (i3-wm)

Re: Полезные советы и скрипты

Сообщение olecya »

Есть еще утилита nl. Имеет расширенный функционал:
dnf list kernel* | nl -bp'devel'
Добавлено (13:46):
algri14 писал:
22.11.2022 05:21
от их нумерации похоже не избавиться,
dnf list kernel* | nl -bp'kernel'
Добавлено (13:47):
dnf list kernel* | nl -bp'\.x86_64'
Спасибо сказали:
Аватара пользователя
algri14
Сообщения: 1065
ОС: Mageia 5.1 & 8 x86_64, KDE

Re: Полезные советы и скрипты

Сообщение algri14 »

olecya писала:
22.11.2022 13:40
Есть еще утилита nl. Имеет расширенный функционал:
dnf list kernel* | nl -bp'kernel'
Прекрасно! только вот в ней без обратной слеши выдаёт ошибку, добавил и отлично

Shell

dnf list kernel\* | nl -bp'kernel'
Последняя проверка окончания срока действия метаданных: 1 day, 18:31:19 назад, Вс 20 ноя 2022 20:41:22.
Установленные пакеты
1 kernel-desktop-5.10.16-1.mga8.x86_64 1-1.mga8 @System
2 kernel-desktop-5.15.65-1.mga8.x86_64 1-1.mga8 @System
3 kernel-desktop-5.19.7-1.mga8.x86_64 1-1.mga8 @System
.......................... и т. д. ..................
Добавлено (15:21):
olecya писала:
22.11.2022 13:40
dnf list kernel* | nl -bp'\.x86_64'
Да-да, отлично, буду иметь ввиду, но со слешью → dnf list kernel\* | nl -bp'\.x86_64'
Я тоже потихоньку начал изучать "птичий" язык, увлекательное занятие, но временами моск трещит :D
Спасибо сказали: