По крайней мере, в 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
восстановить соответствующий файл.
В Bash нет автодополнения для figlet. И даже если бы это было так, я не думаю, что есть общий способ генерировать завершения для определенного контекста, вы должны знать, как работает код завершения для этой конкретной команды.
Однако вы можете перечислить функции без ссылки на код завершения. Имитируя код завершения zsh , шрифты представляют собой файлы *.flf
в каталоге, указанном figlet -I2
. Имена шрифтов являются базовыми именами файлов, но на самом деле вы можете передать полный путь к файлу.
figlet_fonts=("$(figlet -I2)"/*.flf)
Итак, что осталось сделать, так это взять случайный элемент этого массива. Специальная переменнаяRANDOM
выдает случайное число при каждом чтении. Разделите на размер массива и возьмите остаток, чтобы получить случайный индекс массива. (Имеется небольшое смещение в сторону начала массива, что здесь не имеет значения.)
figlet -f "${figlet_fonts[$RANDOM % ${#figlet_fonts[@]}]}" Hello world