У меня есть папка ~/builds
, которая содержит следующие подкаталоги:
> tree ~/builds
~/builds
├── projectA
│ ├── build_2020_04_10_ok
│ ├── build_2020_04_11_ko
│ ├── build_2020_04_12_ok
│ └── ...
└── projectB
├── build_2020_04_10_ok
├── build_2020_04_11_ok
├── build_2020_04_12_ok
└── ...
В настоящее время, когда я пишу команду, которая принимает одну из подпапок в качестве аргумента, и я использую авто -completion, bash
перечисляет всех кандидатов:
> mycmd ~/builds/projectA/[TAB]
> mycmd ~/builds/projectA/build_2020_04_1[TAB][TAB]
build_2020_04_10_ok build_2020_04_11_ko build_2020_04_12_ok ...
Это не то поведение, которое я хочу.
То, что я хочу, больше похоже на Windows -подобное автозаполнение. Я знаю, что могу использовать его, изменив мой .bashrc
таким образом:
bind '"\C-g": menu-complete'
Теперь вот что происходит, когда я нажимаю Ctrl+g
:
> mycmd ~/builds/projectA/[Ctrl+g]
> mycmd ~/builds/projectA/build_2020_04_10_ok[Ctrl+g]
> mycmd ~/builds/projectA/build_2020_04_11_ko[Ctrl+g]
> mycmd ~/builds/projectA/build_2020_04_12_ok
Это почти то, что Я хочу. Я хотел бы изменить порядок отображения подпапок (сначала самые новые, затем старые и старые). Также я хотел бы отказаться от всех сборок ko
. Другими словами, я хочу, чтобы порядок, определенный этой командой:
ls -dr build*ok
build_2020_04_12_ok/ build_2020_04_10_ok/
Поэтому я хотел бы определить спецификацию завершения для menu-complete
, чтобы выполнить желаемое поведение только для подкаталогов ~/builds
. Я видел, что это можно сделать за complete
, и я не нашел информации, чтобы сделать это на menu-complete
.
Возможно ли это?