Палец вверх 1
Перевод
Перевод

Как напечатать значение переменной внутри функции в скрипте оболочки?

Ниже приведен мой скрипт, в котором я помещаю значение в переменную 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 но, похоже, я не могу ее использовать? И это печатает пустой. В чем причина этого и как я могу напечатать переменную local_server в функции hello ?

linux shell unix bash subprocess
задан flash 15 апр. 2018 г., 8:02:13
источник

1 ответ

Палец вверх 0
Перевод
Перевод

У вас есть два варианта. Экспортируйте переменную:

export local_server

или используйте env_parallel:

env_parallel -j 3 hello {} $primary ::: ${pk[@]} &

(env_parallel копирует даже массивы, функции и псевдонимы - в отличие от того, к чему вы привыкли в UNIX).

ответ дан Ole Tange 19 апр. 2018 г., 21:23:48
источник