2010-06-30 137 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以執行