将参数的值传递给shell函数仅打印参数的名称

时间:2019-09-03 10:41:26

标签: bash shell docker parameters

我需要将参数传递给我的shell函数,如下所示:

Starting program: /home/ubuntu/mycode/grpc_project/build/myexecutable
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fab553030 (LWP 27568)]
RunServer
DB parsed, loaded 100 features.
Before builder.BuildAndStart()
[New Thread 0x7faad53030 (LWP 27569)]
[New Thread 0x7faa553030 (LWP 27570)]

我要传递以下参数:

grpc::ResourceQuota rq; rq.SetMaxThreads(n); // n=1 or n=2 builder.SetResourceQuota(rq);

因此,当我传递这三个参数时,将基于它们创建一个新容器。但是,第三个参数有些特殊。因此,还有另一个函数可以获取容器的ip。

function deploy {

        docker create \
        --name=$1_temp \
        -e test_postgres_database=$2 \
        -e test_publicAddress="http://${3}:9696"\
        # other irrelevant stuff

因此,deploy函数的执行实际上如下所示:

deploy test_container test_name #1 test_database #2 ip_address #3

比方说容器的IP地址是1.1.1.1,所以function get_container_ip_address { container_id=($(docker ps --format "{{.ID}} {{.Names}}" | grep $1)) echo $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${container_id[0]}) 。 但是,当我执行脚本并创建容器时,其IP地址为: ip_address=$(get_container_ip_address test_container) deploy test_container test_database ip_address 而非ip_address=1.1.1.1

我还尝试了以下方法:

"http://ip_address:9696"

但是我仍然得到相同的结果。有没有一种方法可以获取所传递参数的值?顺便说一句,我确定它包含所需的ip地址,因为我在其他地方(不在函数中)使用了它,并打印了它进行测试。预先谢谢你!

1 个答案:

答案 0 :(得分:1)

这样运行:

ip_address=$(get_container_ip_address test_container)

deploy test_container test_database $ip_address

在不使用$脚本的情况下调用它时,就像字符串ip_address一样将其保留下来