【发布时间】:2021-11-17 02:55:15
【问题描述】:
我有一个执行此操作的 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 时,它显示不正确。
【问题讨论】: