как захватить построчно ввод с консоли в оболочке - PullRequest
1 голос
/ 26 марта 2012

как читать построчно ввод с консоли при обновлении 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

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

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

если A затем SVN импортировать файл: /// фи

если М затем .. фи

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

Ответы [ 2 ]

1 голос
/ 12 мая 2012

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
1 голос
/ 26 марта 2012

Что-то вроде

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

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

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

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

В общем, такие сценарии лучше писать в более продвинутых, чем shell (например, Perl).

...