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
Я хочу этот:
mybuild
TABTAB
дать мне:
a_target
b_target
Конечно, мне нужно будет написать код завершения дляmybuild
, но я хочу рассчитывать на завершениеbuild
потому что я не могу просто пойти и спросить разработчиковbuild
кодироватьbuild listtargets
приказ просто сделать меня счастливым. Эта функция уже есть, в завершении дляbuild
и мне нужно подключиться к нему.
(Конечно, когда я бегуmybuild a_target
Будешь знать бежатьbuild my/project/directory/a_target
и что я знаю как реализовать и не входит в сферу этого вопроса.)
Я надеюсь, что это иллюстрирует, почему мне нужно подключиться к завершениюbuild
команда и использовать его как черный ящик.