Вы можете посмотреть проект squashmount . Он монтирует каталог как с системой squashfs, так и с системой autofs / overlay / overlayfs, чтобы обеспечить сжатие доступа ro, а также доступ для записи. Полностью настраивается в зависимости от того, сколько изменений требует повторного сжатия, его удобно использовать для хранения базы данных, репозиториев и т. Д.
Это не zsh
заменяет тире символами подчеркивания, а, вероятно, эта docker-compose
программа или другая программа, вызываемая ею.
Проблема в том, что zsh
, в отличие от bash
, не разделяет переменные без кавычек с IFS
по умолчанию.
Если я определяю docker-compose
как функцию, которая печатает каждый свой аргумент, окруженный {}
, вот что я получаю:
$ cat example
docker-compose() {
echo -n docker-compose
for f in "$@"; do echo -n " {$f}"; done; echo
}
compose() { docker-compose $*; }
run() { compose "run --rm app $*"; }
rails() { run "rails $*"; }
rails c
$ zsh example
docker-compose {run --rm app rails c}
$ bash example
docker-compose {run} {--rm} {app} {rails} {c}
Обратите внимание, как run
, --rm
, app
и т. д. передаются как отдельные аргументы в bash
и как один аргумент в zsh
.
Это потому, что bash
разделил и обрезал переменную $*
на несколько аргументов, используя пробелы (значение по умолчанию дляIFS
)в качестве разделителя. Тот же эффект можно получить в zsh
, используя $=*
вместо $*
или с помощью опции set -o SH_WORD_SPLIT
, но это сделает скрипт только zsh -.
Вы должны использовать "$@"
вместо $*
везде, если только у вас нет особых причин не использовать:
compose() { docker-compose "$@"; }
run() { compose run --rm app "$@"; }
rails() { run rails "$@"; }