pwd -P
(в любой оболочке POSIX) - это команда, которую вы ищете.
-P
предназначен для физического (в отличие от логического ( -L
, по умолчанию), где pwd
в основном) выгружает содержимое $ PWD
(которое оболочка поддерживает на основе аргументов, которые вы даете cd
или pushd
)).
$ ln -s . /tmp/here
$ cd /tmp/here/here
$ cd ../here/here
$ pwd
/tmp/here/here/here
$ pwd -P
/tmp
Обычно я бы сказал «используйте jq или jsonpipe или аналогичный, если вы хотите анализировать или извлекать данные из json», но докер проверяет Команда
уже имеет встроенное форматирование вывода и извлечение полей.
Вы можете указать docker inspect
, чтобы он возвращал только интересующие вас поля, например
alias redis-ip="docker inspect -f '{{.NetworkSettings.IPAddress}}' redis"
или
alias redis-ip='docker inspect -f '\''{{.NetworkSettings.IPAddress}}'\'' redis'
Это (кратко) задокументировано на https://docs.docker.com/engine/reference/commandline/inspect/
См. Также Что проверять, когда вы Просматривая для получения более подробной информации и примеров. А Docker Inspect Template Magic - еще одна запись в блоге с хорошим обзором того, что возможно с форматированием вывода docker inspect, и еще несколькими полезными примерами.
Используйте для этого функцию оболочки, а не псевдоним:
function redis-ip {
docker inspect redis |
grep IPAddress |
awk 'NR == 3 { print $2 }' |
sed 's/[^"]*"\([^"]*\)".*/\1/'
}
Если sed
делает то, что вы хотите, или нет, я не знаю, как Я не знаю, что выводит команда docker
.
Проблема в том, что ваш псевдоним заключен в двойные кавычки ( "
). Это означает, что $ 2
в вашем awk
скрипте передается в shell, а не awk
и что двойные кавычки в вашей команде sed
портят ваш псевдоним. Если вы сделаете это вместо этого, ваш псевдоним должен работать должным образом:
alias redis- ip = "докер проверяет Redis | grep IPAddress | awk 'NR == 3 {print \ $ 2}' | sed 's / [^ \ "] * \" \ ([^ \ "] * \) \". * / \ 1 /' "
Наверное, лучше и, конечно, проще использовать функцию хотя.