Bash расширение параметра экранированное значение без кавычек - PullRequest
0 голосов
/ 20 июня 2020

Мне нужно обмениваться данными между хостом и Docker контейнером, используя параметр -v:

$ docker -v host_dir:container_dir image_name

В этом конкретном случае c мне нужно поделиться текущим рабочим каталогом. Обычно это можно сделать так:

$ docker -v `pwd`:container_dir image_name

Но это не удается, если текущий рабочий каталог содержит какие-либо пробелы (или другие символы, которые следует экранировать). Существует специальный способ расширить значение параметра, чтобы его можно было безопасно повторно использовать для ввода:

$ docker -v ${PWD@Q}:container_dir image_name

Но это тоже не помогает, поскольку путь заключен в одинарные кавычки, и это приводит к недопустимому параметру. значение: -v '/present/working/dir with spaces':container_dir. Правильный синтаксис: -v /present/working/dir\ with\ spaces:container_dir.

Итак, мой вопрос: как расширить значение параметра, экранируя специальные символы с помощью обратной косой черты, а не заключая значение в кавычки?

1 Ответ

2 голосов
/ 20 июня 2020

Вы хотите, чтобы переменная была заключена в кавычки в командной строке оболочки:

$ docker -v "`pwd`:container_dir" image_name
or
$ docker -v "$PWD:container_dir" image_name

В противном случае bash выполнит разделение слов после подстановки команды или параметра.

То, что здесь происходит, - это не экранирование обратной косой чертой: это просто заставляет bash понять, что вы не хотите, чтобы там происходило разбиение слов, что заставляет его передавать в качестве одного аргумента вашей программе (в данном случае docker).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...