2014-01-31 3 views
2

У меня есть файл paths.txt:Shell Script: Прочитайте строка в файле

/my/path/Origin/.:your/path/Destiny/. 
/my/path/Origin2/.:your/path/Destiny2/. 
/... 
/... 

Я нужен сценарий CopyPaste.sh с помощью файла paths.txt скопировать все файлы в OriginX для DestinyX

Нечто подобное:

#!/bin/sh 

while read line 
do 
     var= $line | cut --d=":" -f1 
     car= $line | cut --d=":" -f2 
     cp -r var car 

done < "paths.txt" 
+0

Синтаксис является 'переменная = $ (команда)', в то время как вы делаете 'переменная = command', который интерпретируется как "выполнить команда 'var' с' = 'и' command' параметров". – fedorqui

ответ

3

Использования перевода: tr команды & применить cp команды в том же идти!

#!/bin/sh 

while read line; do 
    cp `echo $line | tr ':' ' '` 
done < "paths.txt" 
+0

Извините, это не работает в моем скрипте. – user3228279

+0

Какова ошибка, которую вы видите? –

+0

Если ее обратная ошибка связана с ошибками для не-ksh-оболочек, вы можете попробовать с cp $ (echo $ line | tr ':' '') –

2

Вы должны использовать command substitution, чтобы получить выходной Int командования о переменной оболочке:

#!/bin/sh 

while read line 
do 
     var=`echo $line | cut --d=":" -f1` 
     car=`echo $line | cut --d=":" -f2` 
     cp -r "$var" "$car" 
done < "paths.txt" 

Хотя ваш сценарий может быть упрощен с помощью read -d:

while read -d ":" var car; do 
    cp -r "$var" "$car" 
done < "paths.txt" 
+2

Кажется, что $ отсутствует в строке: cp -r "var" "car" И я не получаю правильные значения, используя 'while read -d .... " –

+0

Да, спасибо за напоминание. Исправлено это сейчас. – anubhava

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