【问题标题】:Run other scripts called in a script in interactive mode以交互模式运行脚本中调用的其他脚本
【发布时间】: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 交互时起作用,如果在被调用脚本中调用另一个脚本,它将不起作用。
鉴于脚本保持不变,欢迎提出任何其他想法。

【问题讨论】:

    标签: bash shell


    【解决方案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
    

    如果您有比这更复杂的要求,请随时提出,我可以提出另一个建议。

    【讨论】:

    • 编辑了回复..这样更好吗?您是否正在寻找一种通用方法来将依赖项从一个脚本添加到另一个脚本?除了通过sudo 获取 docker run 之外,您是否还有特定的问题@
    • 请阅读完整的问题。这是一个通用的东西,不完全是 docker 特定的。上面的脚本只是这里的示例。真实的调用了很多不同的,我不想跟踪和更改所有的。
    • 唯一真正的建议是在不投入大量时间的情况下,我可以考虑使用xargs 命令......它可能做你想做的事。我会尽快删除这个答案,以免自己被否决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多