псевдоним zsh: ошибка разбора рядом с `do ' - PullRequest
0 голосов
/ 09 мая 2018

У меня проблема с псевдонимом для zsh.

У меня есть этот псевдоним в моем .zprofile файле: alias cleanimg="for i in `docker images | grep '<none>' | awk '{print $3}'`; do; docker rmi -f $i; done".

При запуске cleanimg из моего терминала я получаю эту ошибку: zsh: parse error near `do'.

Я пытался удалить ; сразу после ключевого слова do, но это не помогло устранить проблему. Однако этот псевдоним работает правильно, если я выполняю код непосредственно из терминала.

Кто-нибудь может мне помочь с этой синтаксической ошибкой?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Не пытайтесь использовать псевдоним для этого; используйте функцию.

cleanimg () {
  for i in $(docker images | awk '/<none>/ {print $3}'); do
    docker rmi -f "$i"
  done
}

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

(Кроме того, grep | awk конвейеры почти всегда могут быть реализованы с использованием только awk.)

(Мне также интересно, можно ли обойтись без awk и цикла, используя вместо этого параметр --filters; возможно docker rmi -f $(docker images -q -f "dangling=true")?)

0 голосов
/ 22 мая 2018

Если все, что вам нужно, - это очистить образ докера, вы можете установить псевдоним, например:

alias cleanimg='docker rmi -f $(docker images -q -f "dangling=true")'

Подкоманда docker images -q -f "dangling=true" возвращает все ваши идентификаторы для удаления, а поскольку docker rmi принимает аргументы, вы можете передавать их напрямую

0 голосов
/ 09 мая 2018

У вас есть лишняя точка с запятой в цикле for, просто установите ее на -
alias cleanimg="for i in изображения докера | grep '' | awk '{print $ 3}' ; do docker rmi -f $i; done"

...