我正在尝试编写一个shell脚本,将make
几个目标分成几个不同的路径。我将传入一个以空格分隔的路径列表和一个以空格分隔的目标列表,并且脚本将make DESTDIR=$path $target
用于每对路径和目标。在Python中,我的脚本看起来像这样:
for path, target in zip(paths, targets):
exec_shell_command('make DESTDIR=' + path + ' ' + target)
但是,这是我目前的shell脚本:
#! /bin/bash
packages=$1
targets=$2
target=
set_target_number () {
number=$1
counter=0
for temp_target in $targets; do
if [[ $counter -eq $number ]]; then
target=$temp_target
fi
counter=`expr $counter + 1`
done
}
package_num=0
for package in $packages; do
package_fs="debian/tmp/$package"
set_target_number $package_num
echo "mkdir -p $package_fs"
echo "make DESTDIR=$package_fs $target"
package_num=`expr $package_num + 1`
done
是否有一个类似于Python的zip函数的Unix工具或者通过索引从空格分隔列表中检索元素的更简单方法?感谢。
答案 0 :(得分:3)
使用数组:
#!/bin/bash
packages=($1)
targets=($2)
if (("${#packages[@]}" != "${#targets[@]}"))
then
echo 'Number of packages and number of targets differ' >&2
exit 1
fi
for index in "${!packages[@]}"
do
package="${packages[$index]}"
target="${targets[$index]}"
package_fs="debian/tmp/$package"
mkdir -p "$package_fs"
make "DESTDIR=$package_fs" "$target"
done
答案 1 :(得分:1)
这是解决方案
paste -d ' ' paths targets | sed 's/^/make DESTDIR=/' | sh
paste
相当于shell中的zip
。 sed
用于添加make命令(使用正则表达式),结果传递给sh
执行
答案 2 :(得分:0)
在bash中没有办法做到这一点。您需要从输入创建两个数组,然后使用每个数组中的值迭代计数器。