2017-01-19 2 views
0

У меня есть сценарий bash, который принимает файл и выполняет операцию с этим файлом. Во время операции создается out_file. Когда это будет сделано, я запустил другой скрипт (script_2) в мой скрипт, чтобы выполнить другую операцию на out_file. Но проблема в том, что у меня есть, чтобы передать параметры script_2, которые различны для каждого исходного файла:Изменение переменных индекса в скрипте в цикле

#/bin/bash 
for i in $(ls folder); do 
.\*operation*.sh folder/$i   # this step produces the *out_file.$i* 
.\script_2 *out_file.$i* parameter_1 parameter_2 
done 

Таким образом, parameter_1 и parameter_2 должны быть разными для каждого OUT_FILE. Итак, можно ли передавать разные параметры каждый раз внутри цикла и не запускать отдельно script_2, каждый раз для каждого файла?

+2

как разные параметры 'parameter_1' и' parameter_2'? И как вы хотите их установить? Вы хотите написать их вручную? или они зависят от имени файла? или он содержится в каком-то другом файле? – zmo

+2

также не вызывать другие скрипты, используя '. \' Из bash, но используя '. /', Оператор обратной косой черты, вероятно, будет интерпретироваться как escape для следующего символа. – zmo

+1

В соответствии с @zmo вам нужно уточнить, где p_1 и p_2. –

ответ

1

без дополнительной информации это трудно знать, что ваша цель:

$ ls 
script1.sh script2.sh script3.sh testfiles 

ls ./testfiles/ 
file1.txt file2.txt 

$ cat script1.sh 
#!/bin/bash 

for i in $(ls ./testfiles/); do 
     ./script2.sh $i 
     ./script3.sh ./testfiles/out_file.$i parameter_1 parameter_2 
done 

$ cat script2.sh 
#!/bin/bash 

touch ./testfiles/out_$1.txt 

exit 

$ cat script3.sh 
#!/bin/bash 

    echo "dollar1: $1 
    dollar2 $2 
    dollar3 $3 " 

$ ./script1.sh 
dollar1: ./testfiles/out_file.file1.txt 
dollar2 parameter_1 
dollar3 parameter_2 
dollar1: ./testfiles/out_file.file2.txt 
dollar2 parameter_1 
dollar3 parameter_2 

$ ls ./testfiles/ 
file1.txt file2.txt out_file1.txt.txt out_file2.txt.txt 

Как вы можете видеть, что перебирает все файлы в папке, создает из файла, а затем передает это в сценарий 3.

Я бы не советовал вам снова запустить сценарий в текущем формате (тогда он будет прокручиваться через файлы), но вы получите идею.

Смежные вопросы