Bash: получение результата завершения команды программно (например, в переменной)

Как подключиться к завершению другой команды программно?

Предположим, в моем текущем каталоге есть файлыa1, a2, а такжеa3тогда как я могу заставить мою команду вызвать автозаполнениеls a вернутьсяa1 a2 a3?

Это возможно?

Разъяснение и обоснование:

Я выбралls потому что люди могут относиться к этому. Это надуманный пример, но позвольте мне попытаться проиллюстрировать значение этой функции. У меня есть команда под названиемbuild который, учитывая каталог, может автоматически дополнять цели, которые могут быть встроены в этот каталог. Эти цели могут не соответствовать файлам из этого каталога. Цели могут быть заминированыbuild команда из файла сборки, которую я не хочу анализировать. Другими словами:

build path/to/dir/TABTAB

Мог бы дать:

path/to/dir/a_target
path/to/dir/b_target

build это уже существующая команда, а не то, что я могу изменить и изменить в соответствии с моими целями. И то, как он извлекает свои цели, я определенно не хочу знать.

Теперь предположим, что у меня есть целый репозиторийbuildспособные проекты, и большая часть моей работы и, следовательно, большая часть моейbuild работа происходит только в одном проекте. Другими словами, я всегдаbuild какая-то цель подmy/project/directory.

Все идет нормально.

Поэтому я хочу написать оболочку для команды сборки, которая не требует, чтобы я указывал путь к каталогу при каждом запуске. Я хочу, чтобы он знал каталог моего предпочтительного проекта (или каталоги, почему бы и нет) и позволил мне ссылаться на цели, не уточняя их:

Итак, при условии, что у меня есть:

my/project/directory/a_target
my/project/directoryb_target

Я хочу этот:

mybuildTABTAB

дать мне:

a_target
b_target

Конечно, мне нужно будет написать код завершения дляmybuild, но я хочу рассчитывать на завершениеbuildпотому что я не могу просто пойти и спросить разработчиковbuild кодироватьbuild listtargets приказ просто сделать меня счастливым. Эта функция уже есть, в завершении дляbuildи мне нужно подключиться к нему.

(Конечно, когда я бегуmybuild a_targetБудешь знать бежатьbuild my/project/directory/a_targetи что я знаю как реализовать и не входит в сферу этого вопроса.)

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

Ответы на вопрос(3)

Ваш ответ на вопрос