【发布时间】:2020-10-27 13:41:22
【问题描述】:
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(因为该脚本调用了许多其他脚本)。
仅举几例:
- 除非我使用 sudo 运行,否则带有“任何 docker”的脚本将无法工作。我知道我可以将用户添加到 docker 组以使其正常工作。
- 另一个例子是当一些脚本需要 python 和 sudo 时(尽管这是一种不好的做法,原因是在 Centos6 中无法更改默认 python 版本的一些限制)。
我能想到的一种方法是让脚本使用别名,但由于别名仅在 shell 交互时起作用,如果在被调用脚本中调用另一个脚本,它将不起作用。
鉴于脚本保持不变,欢迎提出任何其他想法。
【问题讨论】: