Использование параметра в функции Unix - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу запустить скрипт, используя функцию.Скрипт работает нормально, как есть, но хочу запустить с использованием функции и передать что-то как arg

#! /bin/ksh
#
#       profile.ksh
#
#       sample Korn shell profileument. Example:

build(){
return /home/$1/script.sh;
}

Однако, когда я делаю что-то вроде:

$ build 09272018

Я получаю нижеошибка:

ksh: /home/09272018/script.sh: неверное число

Есть идеи, как этого добиться?Перепробовал разные варианты без особой удачи.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Я думаю, что у вас есть разные подкаталоги, в каждом из которых есть скрипт.sh.
Что-то вроде ${HOME}/version0_1/script.sh, ${HOME}/johndoe/script.sh, ${HOME}/version1_0/script.sh.
Теперь вы хотите запустить правильный скрипт, используя параметр.
Вы можете использовать source (который может быть сокращен до точки .).Когда вам нужно вызвать только один скрипт, параметр подходит, когда вам нужно вызвать много других, рассмотрите переменную.

Всего один вызов

build(){
   source ${HOME}/"$1"/script.sh;
}
build version1_0

Или

# When you need the parameter in other call to
build(){
   source ${HOME}/"${buildversion}"/script.sh;
}
buildversion="version1_0"

Вы можете заметить, что я поместил версию в двойные кавычки.Возможно, кто-то создает subdir с пробелом типа ${HOME}/version0.2 beta 3/script.sh.Я также должен поместить ${HOME} в кавычки, но я думаю, что ваш системный администратор не будет ставить пробел в вашем homedir.

0 голосов
/ 27 сентября 2018

Вы не можете вернуть произвольные значения из функции оболочки, только целые числа (обычно от 0 до 255).Вместо этого вы либо записываете «возвращаемое значение» в стандартный вывод:

$ build () { echo /home/$1/script.sh; }
$ script_name=$(build 09272018)
$ echo "$script_name"
/home/09272018/script.sh

, либо устанавливаете глобальную переменную.

$ build () { script_name=/home/$1/script.sh; }
$ build 09272018
$ echo "$script_name"
/home/09272018/script.sh

(В любом случае значение возвращается return должен быть состоянием выхода, где 0 указывает на успешное выполнение функции, а ненулевое значение указывает на ее сбой каким-либо образом. Его никогда не следует использовать для возврата данных.)

...