Да, передав его на стандартный ввод . Один из способов сделать это — конвейер (, демонстрирующий, как поменять местами две строки ):
.
$ cat > test.sh <<'EOF'
> #!/bin/sh
> read -r first
> read -r second
> printf '%s\n' "$second" "$first"
> EOF
$ chmod u+x test.sh
$ printf '%s\n' foo bar | nohup./test.sh
nohup: appending output to 'nohup.out'
$ cat nohup.out
bar
foo
Вы можете использовать команду fc _list, чтобы получить список доступных шрифтов в том формате, в котором вы хотите их ввести.
Вот как это вписывается в ваш пример кода:
_completeWithFontName() { < <(fc-list -f "%{family}\n" | grep "^$2" | sort -u) mapfile -t COMPREPLY; }
complete -F _completeWithFontName doSomethingWithFont
Обратите внимание, что вы не должны передавать команду в файл карты. :piping помещает команду назначения в подоболочку, и вы немедленно потеряете новое содержимое массива COMPREPLY при выходе из этой подоболочки. Перенаправление <
из подстановки процесса <(...)
работает лучше.
Параметр -f
списка fc -задает формат, простая команда grep выбирает те имена шрифтов, которые соответствуют первым символам, введенным в командной строке, а сортировка выполняется для удобства. Я также добавляю-u
(уникальный параметр )в сортировку, потому что в этом примере я перечисляю только семейства; каждый вариант будет выглядеть как дубликат, поэтому мы должны их отсортировать.