bash如何修改命令行参数
背景是这样的,假设有一个bash脚本接受用户参数,然后做环境检查,然后调用一个子命令,并把用户的输入参数传给子命令,这当中要修改部分命令参数的值。
例如:用户调用:
$ wrapper.sh -cmd convert -infile path/to/infile -outfile path/to/outfile
然后在wapper.sh里面,需要把-infile和-outfile的值改掉,例如相对路径改成决定路径;之后再调用子命令sub.sh
$ cat wrapper.sh
...
...change command line parameters...
sub.sh $@
...
实现脚本:
$ cat wrapper.sh
...
INFILE=""
OUTFILE=""
args=("$@")
for ((i = 0; i < ${#args[@]}; i++ )); do
echo $i=${args[$i]}
if [ "${!i}" == "-infile" ]; then
INFILE=${args[$i]}
set -- "${@:1:${i}}" "/tmp/tmpinfile" "${@:$(($i+2))}"
elif [ "${!i}" == "-outfile" ]; then
OUTFILE=${args[$i]}
set -- "${@:1:${i}}" "/tmp/tmpoutfile" "${@:$(($i+2))}"
fi
done
echo sub.sh $@
变量INFILE和OUTFILE存储的是原始参数值。
运行结果:
$ ./wrapper.sh -cmd convert -infile myinfile -outfile myoutfile
sub.sh -cmd convert -infile /tmp/tmpinfile -outfile /tmp/tmpoutfile
网友评论