我想使用功能运行脚本。脚本可以正常运行,但是希望使用函数运行并以arg
的形式传递#! /bin/ksh
#
# profile.ksh
#
# sample Korn shell profileument. Example:
build(){
return /home/$1/script.sh;
}
但是当我做类似的事情时:
$ build 09272018
我遇到以下错误:
ksh:/home/09272018/script.sh:错误的数字
任何想法如何做到这一点?运气不好就尝试了各种选择。
谢谢!
答案 0 :(得分:2)
您不能从Shell函数返回任意值,只能返回整数(通常为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表示函数成功,而非零值表示函数以某种方式失败。永远不要将其用于返回数据。)
答案 1 :(得分:0)
我认为您有一个不同的子目录,每个子目录都有一个script.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"
您可能会注意到,我将版本放在双引号中。也许有人用诸如${HOME}/version0.2 beta 3/script.sh
之类的空格制作一个子目录。我也应该在引号中加上${HOME}
,但我认为系统管理员不会在homedir中放置空格。