我有一个korn脚本可以做到这一点:
testing.ksh:
m_Ftp -t'echo "No skipping"' -f DEV_OVR MMMM <<!
lcd ${REMOTE_DIR}
pwd
cd ${DEST_DIR}
ls
put test11.txt
bye
!这将调用另一个脚本,该脚本获取选项(如果有)并按预期分配变量。然而,出于某种原因,它会这样做:
调用的其他脚本中的m_Ftp:
# Get argument (-f "DEV_OVR")
ARGVAL=""
DEVCMD=""
while getopts f:t: opt; do
case $opt in
# Oracle ID
f) ARGVAL="$OPTARG"; shift;; #should be "No skipping"
t) DEVCMD="$OPTARG"; shift;; #should be DEV_OVR
?) ;;
esac
done
echo "0:" $0
echo "1:" $1
echo "2:" $2
echo "3:" $3
echo "Argval:" $ARGVAL
echo "DEVCMD:" $DEVCMD
#different
M_SITE_NAME="$2"
echo "M_SITE_NAME:" $M_SITE_NAME输出:
0: m_Ftp
1: -f #expect MMMM
2: DEV_OVR
3: MMMM
Argval:
DEVCMD: echo "No skipping"
M_SITE_NAME: DEV_OVR #should be MMMM我需要这个工作,所以它的FTP是正确的位置,MMMM,无论给什么选项。
我尝试在testing.ksh中去掉-f和DEV_OVR之间的空格,这是输出,它正确地显示了站点,但没有显示DEVCMD或Argval的正确内容:
0: m_Ftp
1: -fDEV_OVR
2: MMMM
3:
Argval:
DEVCMD: echo "No skipping"
M_SITE_NAME: MMMM
M_FTP_SITE here: MMMM如何正确显示SITE、devcmd和argval?上一个脚本版本没有在参数列表中提供devcmd,并且从$1而不是$2获取站点名称,但是当我打印argval时,它显示不正确。
发布于 2021-09-24 13:29:15
这将返回正确的选项并删除它们,使站点位于$1中:
ARGVAL=""
DEVCMD=""
while getopts f:t: opt
do
case $opt in
# Oracle ID
t) ARGVAL="$OPTARG";; #shift;;
f) DEVCMD="$OPTARG";; #shift;;
?) ;;
esac
done
shift $((OPTIND-1))https://stackoverflow.com/questions/69304570
复制相似问题