$ VBoxManage showvminfo 'Test Machine' --machinereadable | sed -n '/^UUID=/{ s///; s/"//gp; }'
1ce7ffef-8faa-4138-9b92-466698762f62
Вместо использования команды list vms
sub -используется команда sub -showvminfo
, которая получает всю информацию для конкретной машины (здесь VM с именемTest Machine
). В --machinereadable
это выводит данные в форме, которую легко анализировать. UUID виртуальных машин будет выводиться как
UUID="1ce7ffef-8faa-4138-9b92-466698762f62"
, который обнаруживает команда sed
. Он удаляет бит UUID=
и все двойные кавычки, а затем печатает все, что осталось.
Команду sed
можно записать несколькими способами. Вариант, например,
sed -n 's/^UUID="\(.*\)"$/\1/p'
Предположим, что вы используете «новую» (1990-е )систему завершения, т. е. вызов compinit
есть в вашей.zshrc
(или в структуре конфигурации zsh, если вы ее используете ). ], вы можете переопределить стандартные завершения двумя способами:
_gem
(, для всех команд, которые ее используют ), поместив функцию с тем же именем в каталог, который идет первым в $fpath
. Этот каталог должен присутствовать в $fpath
перед вызовом compinit
. compdef
, чтобы отменить настройку compinit
. Это нужно сделать после вызова compinit
. Таким образом, чтобы просто заполнить имена файлов после gem
, запустите это после вызоваcompinit
:
compdef _files gem
Впрочем, на столь радикальные меры идти не нужно. Есть способы выполнить завершение файла, даже если zsh считает, что контекст требует чего-то другого.
Концептуально самый простой, но не самый удобный способ — временно изменить контекст. Например, введите ;l
, завершите имя файла, а затем удалите ;l
. Или Home0
End , введите имя файла, HomeDelEnd .
Вы можете привязать_bash_complete-word
к привязке клавиш, оканчивающейся на /
, например ^X/
. Затем нажмите ^X/
в любом месте, чтобы завершить имя файла. В вашем случае это работает только в том случае, если вы ставите пробел после --with-pg_config
, а не знак равенства, поскольку этот виджет не рассматривает =
как разделитель.
Возможно, вы можете воспользоваться преимуществами _most_recent_file
, привязанного к ^Xm
по умолчанию. Это завершает самое последнее имя файла, независимо от контекста. В вашем случае это работает только в том случае, если вы ставите пробел после --with-pg_config
, а не знак равенства, поскольку этот виджет не рассматривает =
как разделитель. Например:--with-pg_config /o
^Xm
/h
^Xm
/o
^Xm
/*pq
^Xm
…
Вы можете определить свой собственный виджет завершения для завершения файлов и привязать его к клавише.
_complete_files () {
if [[ $PREFIX == [-0-9A-Z_a-z]##=* ]]; then
IPREFIX+=${PREFIX%%\=*}=
PREFIX=${PREFIX#*=}
fi
_main_complete _files
}
zle -C _complete_files complete-word _complete_files
bindkey '\e^F' _complete_files
Затем вы можете нажать Ctrl+Alt+F в любом месте, чтобы завершить имя файла.Эта функция завершает текущее слово оболочки независимо от контекста, за исключением того, что она игнорирует префикс, например --option=
.