2010-06-30 140 views
3

我正在尝试编写一个shell脚本,将make几个目标分成几个不同的路径。我将传递一个空格分隔的路径列表和一个以空格分隔的目标列表,脚本将为每对路径和目标分配make DESTDIR=$path $target。在Python中,我的剧本会是这个样子:shell脚本的zip函数

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 

有Unix的工具,等同于Python的拉链功能或检索的简单方法一个由空格分隔的列表中的元素的索引?谢谢。

回答

2

使用的数组:

#!/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 
0

在bash中没有办法做到这一点。您需要从输入创建两个数组,然后使用每个数据的值遍历计数器。

0

下面是解

paste -d ' ' paths targets | sed 's/^/make DESTDIR=/' | sh 

paste是等效的在壳zipsed用于前缀make命令(使用正则表达式),并将结果传递给sh以执行