在BASH中,我想这样做:
#!/bin/bash
HOST="blah"
USER="foo"
REMOTE_ROOT="${HOST}:~${USER}/"
REP_NAME=`basename $1`
TARGET_NAME="${REP_NAME}.git"
CMD1="git clone --bare $1 $TARGET_NAME"
CMD2="touch ${TARGET_NAME}/git-daemon-export-ok"
CMD3="scp -r $TARGET_NAME $REMOTE_ROOT"
CMD4="rm -rf $TARGET_NAME"
for i in {1..4}
do
CMD="${CMD${i}}"
echo "$CMD"
`$CMD`
done也就是说,我想遍历一系列命令,显示正在执行的命令,然后执行它。
我不知道如何执行双重取消引用(CMD="${CMD${i}}“在BASH中是不合法的)。
或者,我很乐意这样做:
for CMD in "CMD1 CMD2 CMD3 CMD4"
do
echo $$CMD
done当然,这也不是正确的语法。
发布于 2009-07-29 22:06:36
CMDS[1]="git clone --bare $1 $TARGET_NAME"
CMDS[2]="touch ${TARGET_NAME}/git-daemon-export-ok"
CMDS[3]="scp -r $TARGET_NAME $REMOTE_ROOT"
CMDS[4]="rm -rf $TARGET_NAME"
# ...
for x in 1 2 3 4
do
${CMDS[x]};
done发布于 2009-07-29 22:06:23
你可以把你的CMD放在array里吗?
发布于 2009-07-29 22:14:16
你需要${!parameter}语法,至少可以在bash中工作。例如:
#!/bin/sh
CMD1="ls"
CMD2="pwd"
for CMD in {CMD1,CMD2} ; do
echo ${!CMD}
${!CMD}
donehttps://stackoverflow.com/questions/1203326
复制相似问题