gpt4 book ai didi

bash - 在Shell脚本中进行参数扩展时取消引用环境变量

转载 作者:行者123 更新时间:2023-12-02 18:51:39 24 4
gpt4 key购买 nike

我正在尝试使用参数扩展$@取消引用环境变量的值,但它似乎不起作用。

我需要使用某些参数调用shell脚本。参数列表包含环境变量,并且环境变量应存在于要执行Shell脚本的位置。我之前不知道命令列表,所以我正在使用$@扩展这些命令列表。但是,该脚本无法取消引用环境变量的值。

可以按照以下说明完成我的问题的最小设置。

  • Dockerfile
  • FROM alpine:3.10

    ENV MY_VAR=production

    WORKDIR /app

    COPY run.sh .

    ENTRYPOINT [ "sh", "run.sh" ]
  • run.sh
  • #!/bin/sh

    echo "Value of MY_VAR is" $MY_VAR

    echo "Begin"

    $@

    echo "Done"

    我可以使用 docker build . -t env-test构建图像。当我使用 docker run env-test:latest 'echo $MY_VAR'运行它时,我得到以下输出。
    Value of MY_VAR is production
    Begin
    $MY_VAR
    Done

    虽然我期望的输出是:
    Value of MY_VAR is production
    Begin
    production
    Done

    SideNote:实际上,我正在尝试使用如下组成文件运行它:
    version: '3'

    services:
    run:
    image: env-test:latest
    command: echo $$MY_VAR

    但这又给了我类似的结果。

    最佳答案

    扩展eval方法,这是一个简单的bash脚本,它将使用eval将字符串作为bash命令序列进行评估:

    #!/usr/bin/env bash
    echo program args: $@
    eval $@

    但请注意, eval带有危险:

    https://medium.com/dot-debug/the-perils-of-bash-eval-cc5f9e309cae

    关于bash - 在Shell脚本中进行参数扩展时取消引用环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951695/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com