#bash #shell
#bash #оболочка
Вопрос:
TLDR
$ docker ps
Get http:///var/run/docker.sock/v1.19/containers/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ alias docker="sudo docker"
$ cat script1.sh
docker ps
./script2.sh
$ cat script2.sh
docker image ls
$ bash -i script1.sh # call in interactive mode so that aliases could expand
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Get http:///var/run/docker.sock/v1.19/containers/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
Как мне заставить другие скрипты, вызываемые первым скриптом, также выполняться в интерактивном режиме без фактического изменения скриптов?
Причина, по которой сценарии не меняются, заключается в том, что существует множество вложенных скриптов, которые я пытаюсь запустить только на своей рабочей станции. Я хочу прекратить хлопоты по их изменению каждый раз и возвращению перед выполнением git commit
.
Пример использования
Есть несколько вариантов использования, когда мне нужно запускать скрипты, где некоторым командам требуется sudo для работы в моей рабочей области. И поэтому я ищу способ заставить их работать без прямого редактирования скриптов для добавления sudo перед этими командами (поскольку скрипт вызывает множество других скриптов).
Чтобы назвать несколько:
- Скрипт с «anything docker» не будет работать, если я не запущу его с помощью sudo. Я знаю, что могу добавить пользователя в группу docker, чтобы заставить его работать.
- Другим примером может быть ситуация, когда нескольким скриптам требуется python с sudo (несмотря на то, что это плохая практика, причиной которой является несколько ограничений, связанных с невозможностью изменить версию python по умолчанию в Centos6).
Один из способов, который я могу придумать, чтобы заставить скрипт использовать псевдонимы, но поскольку псевдонимы работают только тогда, когда оболочка интерактивна, это не сработает, если в вызываемом скрипте вызывается другой скрипт.
Я приветствую любые другие идеи, учитывая, что скрипты остаются неизменными.
Ответ №1:
script1.sh
alias docker="sudo docker"
docker ps
script2.sh
. ./script1.sh # assumes sript1/script2 are in same dir
docker image ls
> bash -i script2.sh
Если у вас есть более сложные требования, чем это, не стесняйтесь добавлять их, и я могу сделать другое предложение.
Комментарии:
1. Отредактировал ответ .. это лучше? Вы ищете общий способ добавления зависимости от одного скрипта к другому? Есть ли у вас конкретная проблема, помимо запуска docker через
sudo
2. Пожалуйста, прочитайте полный вопрос. Это общая вещь, не полностью специфичная для docker. И приведенные выше сценарии — это просто примеры. Настоящие вызывают много разных, и я не хочу отслеживать и изменять их все.
3. Единственное реальное предложение, которое я могу сделать, не затрачивая на это значительного времени, — это посмотреть на использование
xargs
команды … он может делать то, что вы хотите. Я удалю этот ответ в ближайшее время, чтобы спасти себя от голосования