Автозаполнение Bash :выбрать случайное предложение

По крайней мере, в Linux вы можете получить доступ ко всем файлам, открытым процессом, в/proc/${pid}/fd:

$ echo Test > removeme
$ sleep 1200 < removeme &
[1] 21954
$ rm removeme
$ ls -l /proc/21954/fd
total 0
lr-x------. 1 skitt skitt 64 Aug 13 17:14 0 -> '/home/skitt/tmp/removeme (deleted)'
lrwx------. 1 skitt skitt 64 Aug 13 17:14 1 -> /dev/pts/7
lrwx------. 1 skitt skitt 64 Aug 13 17:14 2 -> /dev/pts/7
$ cat /proc/21954/fd/0
Test

Вы можете cpвосстановить соответствующий файл.

1
13.10.2021, 17:03
1 ответ

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

Однако вы можете перечислить функции без ссылки на код завершения. Имитируя код завершения zsh , шрифты представляют собой файлы *.flfв каталоге, указанном figlet -I2. Имена шрифтов являются базовыми именами файлов, но на самом деле вы можете передать полный путь к файлу.

figlet_fonts=("$(figlet -I2)"/*.flf)

Итак, что осталось сделать, так это взять случайный элемент этого массива. Специальная переменнаяRANDOMвыдает случайное число при каждом чтении. Разделите на размер массива и возьмите остаток, чтобы получить случайный индекс массива. (Имеется небольшое смещение в сторону начала массива, что здесь не имеет значения.)

figlet -f "${figlet_fonts[$RANDOM % ${#figlet_fonts[@]}]}" Hello world
2
13.10.2021, 17:33

Теги

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