Запускать другие скрипты, вызываемые в скрипте, в интерактивном режиме

#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 команды … он может делать то, что вы хотите. Я удалю этот ответ в ближайшее время, чтобы спасти себя от голосования