LINUX.ORG.RU

[bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?


0

0

Например, нужно чтоб скрипт общался с ftp сервером учитывая ответы.

После запуска `ftp -n example.com &' pid потомка (процесса ftp) хранится в $!. Можно ли как-то зная pid писать в stdin и читать из stdout средствами bash?

Очень желательно обойтись без именованных пайпов.

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

tty1:

$ cat

tty2:

echo "Hello!" > /proc/`pidof cat`/fd/0

В результате на tty1 cat напечатает строчку "Hello\n".

linuxfan ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

Да.

/proc/$PID/fd/0 -- stdin
/proc/$PID/fd/1 -- stdout
/proc/$PID/fd/2 -- stderr


annoynimous ★★★★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

linuxfan и annoynimous спасибо. Пример работает.

А вот с ftp не работает.

Запускаю

ftp -n 192.168.0.147 &
Шлю
echo -e "quote user neo\nquote pass 123\n" > /proc/6126/fd/0
В консоль вывод есть, а в логах фтп сервера не пишется что кто-то пытался залогиниться.

LinuxUser ★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

Ну так это вывод на консоль. Сам-то ftp не видит получает этих данных. Ты что сделать-то хочешь?

true_admin ★★★★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

может тебе проще сделать так?

(echo -e "quote user neo\nquote pass 123\nget bla-bla") | ftp -n 192.168.0.147

или, если нет, опиши use case'ы.

isden ★★★★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

Лучше для таких целей создавать FIFO, будет более кроссплатформенно.

provaton ★★★★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

Use expect, Luke!

kemm ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

По-нормальному, use mechanize или что-то в этом духе. Извраты с expect не нужны :)

true_admin ★★★★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

> use mechanize или что-то в этом духе

Ой. Что-то я на него посмотрел и подумал, что бОльший изврат -- это именно mechanize (если это тот, который на ruby). expect как-то прозрачнее. И вообще, старый друг борозды не портит! 8))

kemm ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

да, вспомнил вские недосвитчи и понял что на счёт ненужности погорячился.

Не, не на руби. На лоре пару месяцев назад эту штуку хвалили. На питоне оно.

true_admin ★★★★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

> Не, не на руби. На лоре пару месяцев назад эту штуку хвалили. На питоне оно.

В общем, этих механайзов... И на руби, и на питоне, и на перле, да ещё, кажется, не по одному варианту. Ну их к лешему, expect хоть один. 8))

kemm ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

нет, конечно. я вот ексепк тоже в основном из питона юзаю, пекспект.

val-amart ★★★★★ ()

Re: [bash] Можно ли получить доступ к stdin и stdout процесса форкнутого амперсандом?

http://tiswww.case.edu/php/chet/bash/bashref.html#SEC91

Background processes which attempt to read from (write to) the terminal are sent a SIGTTIN (SIGTTOU) signal by the terminal driver, which, unless caught, suspends the process.

Намек очевиден?

balodja ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.