Почему zsh не нравится файловый шаблон типа *17*?

Discos le permitirá desmontar un volumen sin expulsar la unidad. Simplemente seleccione la unidad a la izquierda y la partición a la derecha, y haga clic en el botón desmontar/detener que se encuentra debajo.

2
24.07.2019, 10:01
1 ответ

Как вы уже выяснили, в zsh есть способ отключить расширение подстановочных знаков для определенных команд. Если вы поместитеnoglobперед командой, zsh не будет расширять слова команды подстановочными знаками. Поскольку ввод noglobчасто требует таких же усилий, как и цитирование подстановочных знаков в аргументах, наиболее распространенным способом использования является автоматическое закрытие определенных команд путем создания имени команды как псевдонима того же имени команды с префиксом noglob.. Например, после

alias scp='noglob scp'

вы не получите расширения подстановочных знаков в командной строке scp, но в остальном команда scpбудет выполняться нормально.

Вы можете обойти псевдоним с помощью

\scp *17* freefall.freebsd.org: 

или

=scp *17* freefall.freebsd.org: 

\scpигнорирует псевдоним и ищет функцию, встроенную или внешнюю команду с таким именем. =scpищет только внешнюю команду.

Предотвращение раскрытия подстановочных знаков для аргументов scpпозволяет вам писать scp remote:*17*без кавычек, но имеет большой недостаток, заключающийся в том, что вы не можете писать scp *17* remote:. Можно пойти дальше и заставить аргументы scpиметь подстановочные знаки, только если они не похожи на имена удаленных файлов. Вот функция, которая анализирует аргументы scpи расширяет подстановочные знаки только в тех аргументах, которые не похожи на параметры или имена удаленных файлов.

function glob_non_remote {
  local a x
  a=($1); shift
  for x; do
    # Do wildcard expansion manually, but only for arguments that don't look
    # like options or remote file names.
    case $x in
      (*:*|-*|) a+=("$x");;
      *) a+=($~x);;
    esac
  done
  "${(@)a}"
}
alias scp='noglob glob_non_remote scp'
4
27.01.2020, 22:02

Теги

Похожие вопросы