【发布时间】:2018-09-25 02:11:53
【问题描述】:
下面是我的脚本,我根据情况将值放入 local_server 变量中:
#!/bin/bash
servers=(machine981.abc.host.com luck123.pqr.host.com gond654.def.host.com)
case $(hostname -f) in
*abc.host.com)
local_server=("${servers[0]}")
;;
*pqr.host.com)
local_server=("${servers[1]}")
;;
*def.host.com)
local_server=("${servers[2]}")
;;
*) echo "unknown host: $(hostname -f), exiting." && exit 1 ;;
# ?
esac
# now this print works fine and it shows right value
echo $local_server
hello() {
el=$1
we=$2
# but this print inside "hello" function doesn't print anything? Why?
echo $local_server
}
export -f hello
parallel -j 3 hello {} $primary ::: ${pk[@]} &
parallel -j 3 hello {} $secondary ::: ${sk[@]} &
现在我有一个函数hello(),我想在其中使用local_server 变量,但看起来我不能使用它?它打印为空。这背后的原因是什么?如何在hello函数中打印local_server变量?
【问题讨论】:
-
为我工作。您实际上是在某处调用
hello函数吗?它不在您问题的代码中。另外:h=$(hostname -f); for s in "${servers[@]}"; do [[ $s = *$h ]] && local_server="$s"; done -
编辑了我的问题以显示我如何称呼它?我正在使用
gnu-parallel来调用 hello 函数。 -
啊,这很重要。
parallel没有内置在 bash 中,因此 array$local_server的内容无法导出。试着把它变成一个普通变量,不要忘记导出它。 -
正常变量是什么意思?我不太明白。此外,您在第一条评论中给出的示例在某种程度上不起作用 - 因为我需要根据我是否有
abc.host.com或def.host.com或pqr.host.com从服务器列表中选择机器。因此,如果当前主机名具有abc.host.com,那么我将选择 local_server 作为machine981.abc.host.com,其他主机名也是如此。 -
variable="value"为$variable赋值,这是一个普通的标量变量。variable=("value")为数组${variable[@]}分配一个值,该值应使用此语法正确评估,并且无法导出。
标签: linux bash shell unix subprocess