2012-03-26 1 views
1

Как читать строки за строкой ввода с консоли, когда вы выполняете обновление svn.Как захватить линейный ввод с консоли в оболочке

!/bin/bash 
for line in $(svn update) 
do 
    printf "$line\n"; 
done 

это напечатает его словом. Мне нужно построчно экс:

A paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/newap.java 
M paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/telap.html. 
D paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/newap_subdirs.mak. 
U paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/ABC.png 

захватить вышеуказанный файл из консоли

как Grep начало файла (A M D U) в выше и принять меры?

если А затем Svn файл импорта: /// фи

если M тогда .. фи

так далее для D и U

+0

** Какой бизнес-задачи ** вы пытаетесь решить? –

ответ

1

Что-то вроде

svn update | while read LINE; do 
... 
done 

Подробнее о команде «читать» в оболочке.

Обратите внимание, что переменные оболочки изменяются внутри, а блок маловероятен из-за этого (это оболочка зависит, но большинство ее не экспортирует).

Другой способ - переопределить IFS для одиночного символа «\ n», но это может работать не где угодно - довольно часто приходится видеть разбор ошибок в оболочках. Я не знаю об устойчивости там.

Как правило, лучше писать такие скрипты в чем-то более продвинутом, чем оболочка (например, Perl).

+1

+1 для ответа '... while read line' -1 для« лучше писать такие скрипты в чем-то более продвинутом »;-) .. Удачи всем. – shellter

+0

спасибо. Это было полезно! – user1292259

+0

Не могли бы вы рассказать мне, как grep модификаторы файлов, если это A M D U внутри цикла while? ссылка выше пример – user1292259

1

UPDATE_LOG - это файл по вашему выбору, он будет называться как, например, «svn_update_2012-05-13.1336839745», где цифры суффикса после «.» секунд с '1970-01-01 00:00:00 UTC'. Или используйте% N для наносекунд.

#!/bin/sh 

set -e 

UPDATE_LOG=/tmp/svn_update_$(date +%F.$s) 

svn update > $UPDATE_LOG 

while read -r line; do 
    filename=${line#* } 
    case ${line%% *} in 
    A) 
     # svn import file:/// $filename ? 
     ;; 
    D) 
     # so on ... 
     ;; 
    M) 
     # ... 
     ;; 
    U) 
     # so on ... 
     ;; 
    *) 
     echo "He's Dead, Jim!" 
     exit 1 
     ;; 
    esac 
done << $UPDATE_LOG 

Замечание:

выше сценарий будет иметь проблемы с 5-ю строку следующим образом:

A paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/newap.java 
M paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/telap.html. 
D paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/newap_subdirs.mak. 
U paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/ABC.png 
    paris/input/hyb/shmc/com//hwmca/workload/eam/tasks/create/res/He_s_Dead.Jim