Вопрос на засыпку - где рвется канал? (Bash+Ssh+while read)

Модератор: Модераторы разделов

Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Вопрос на засыпку - где рвется канал?

Сообщение madskull »

Делаем так (команда ls взята только для примера):

Код: Выделить всё

ssh somehost ls | while read file; do
   echo $file
done

Всё нормально, echo отрабатывается для всех файлов.

А если делаем так:

Код: Выделить всё

ssh somehost ls | while read file; do
    ssh somehost ls -l $file
done


То отрабатывает только первый read.

Чесал я репу, чесал, но так и не понял:
Интересно, почему?
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вопрос на засыпку - где рвется канал?

Сообщение sash-kan »

судя по всему, как-то рушится pipe.
одно соединение (которое делает ls -l $file) отрабатывает, а следующее уже нифига от самого первого ssh не получает.
вывод сделан на основании работоспособности такой конструкции:
for $file in `ssh somehost ls`; do ssh somehost ls -l $file; done
а почему рушится - х.з.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Вопрос на засыпку - где рвется канал?

Сообщение Sparky »

Может быть второе соединение обрубает первое, поэтому read и отрабатывает 1 раз всего.
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Вопрос на засыпку - где рвется канал?

Сообщение madskull »

Нет, если сделать

Код: Выделить всё

ssh somehost ls >list
cat list | while read file; do
   ssh somehost ls -l $file
done

То же самое.
Похоже, именно ssh "глушит" именно read.
Ведь конструкции
... | ssh ...
и
ssh ... | ...
работают нормально.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Вопрос на засыпку - где рвется канал?

Сообщение Sparky »

(madskull @ Вторник, 26 Июля 2005, 15:53) писал(а):Нет, если сделать

Код: Выделить всё

ssh somehost ls >list
cat list | while read file; do
   ssh somehost ls -l $file
done

То же самое.
Похоже, именно ssh "глушит" именно read.
Ведь конструкции
... | ssh ...
и
ssh ... | ...
работают нормально.

Можно в таком случае предположить, что у ssh свое окружение, не зависящее от оболочки из которой он запущен... хотя с другой стороны он должен отрабатывать и все равно оболочке управление возвращать.
Кстати, не понял отрабатывает ли вот эта конструкция?

Код: Выделить всё

  ssh somehost ls -l $file
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Вопрос на засыпку - где рвется канал?

Сообщение madskull »

(Sparky @ Вторник, 26 Июля 2005, 16:00) писал(а):Кстати, не понял отрабатывает ли вот эта конструкция?

Код: Выделить всё

  ssh somehost ls -l $file


Работает. Подозреваю, что это у всех так, так что можешь и у себя посмотреть :)
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вопрос на засыпку - где рвется канал?

Сообщение sash-kan »

да, видимо дело в read. не хотит читать из pipe-а
потому как, в принципе, pipe работоспособен в схеме ssh...|...ssh :
ssh somehost ls | xargs -n 1 -i{} ssh somehost ls -l {}

хотя...
только что глянул на список процессов во время выполнения данной конструкции.
ssh висит только один. после xargs.
значит, xargs берет весь список сразу, не пользуясь pipe-ом для последовательного чтения/выполнения?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Вопрос на засыпку - где рвется канал?

Сообщение Sparky »

(madskull @ Вторник, 26 Июля 2005, 16:13) писал(а):
(Sparky @ Вторник, 26 Июля 2005, 16:00) писал(а): Кстати, не понял отрабатывает ли вот эта конструкция?

Код: Выделить всё

  ssh somehost ls -l $file


Работает. Подозреваю, что это у всех так, так что можешь и у себя посмотреть :)


В таком случае возможно действительно ssh не возвращает управление оболочке?
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Вопрос на засыпку - где рвется канал?

Сообщение madskull »

Ну, я так не играю.
Пришел домой, попробовал то же самое с ArchLinux десктопа на ArchLinux сервак. Все работает, как не ожидается, правильно. Ничего не обламывается...
На работе, когда создавался топик, это происходило с Arch'а на Debian и c Debian'а на Debian....

Обнаружил я это с месяц назад, сейчас просто хотел получить научное обоснование. Ан нет, получается, что это еще один минус дебиану (Strangerrr ;) ) ... наверное... мож просто настройки ssh какие особенные?..



madskull добавил в 26.07.2005 19:48

Да, домашний и рабочий ArchLinux клоны. Установил в одном месте и просто скопировал на другое и на ноутбук.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Вопрос на засыпку - где рвется канал?

Сообщение Sparky »

А что если конфиг с домашней системы перенести на работу и попробовать?
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Вопрос на засыпку - где рвется канал?

Сообщение madskull »

(Sparky @ Вторник, 26 Июля 2005, 21:11) писал(а):А что если конфиг  с домашней системы перенести на работу и попробовать?

Говорю ж - клоны. И содержимое хомяка по subversion синхронизируется.
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Вопрос на засыпку - где рвется канал?

Сообщение Sparky »

Ну бывают такие вообще такие непонятные ситуации... обычно начинает рабоать на 333 раз, и непонятно почему не работало :devil_2:
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вопрос на засыпку - где рвется канал?

Сообщение sash-kan »

Для madskull:
ну конечно, сразу майнтайнеры виноваты (:
а может, все-таки проблема непосредсвенно в баше?
проверил связку fc1 -> debian и debian -> fc1
в обоих случаях не пашет. и версия баша одна и та же.
GNU bash, version 2.05b.0(1)-release
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: Вопрос на засыпку - где рвется канал?

Сообщение xorader »

точно версия одинаковая ? может пачти от дистрибутива какие ?
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Вопрос на засыпку - где рвется канал?

Сообщение sash-kan »

Для xorader:
если честно,не знаю, как узнать, какие патчи дистрибьюторы наложили.
но думаю, это и несущественно, т.к., если бы версии хоть как-то отличались, возможно, было бы другое поведение.
а так
debian -> debian
fc1 -> debian
debian -> fc1
один результат.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: