LINUX.ORG.RU

BASH скрипт

 , ,


1

2

Помогите написать скрипт на bash`e. Запускается консольная программа server, потом запускаться консольная программа client. После чего выводиться то что нам вывелось в server на экран и выводиться то что вывелось в client.

#!/bin/bash
touch /path/to/some/file
server >> /path/to/some/file
client >> /path/to/some/file
cat /path/to/some/file
rm /path/to/some/file
exit
Vsevolod-linuxoid ★★★★★ ()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)

Помогите написать

Что конкретно не получается?

В противном случае это уже не помощь, и в Job.

r3lgar ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

А где trap?

Почему ты не учёл, что клиент может быть ncurses?

Почему ты срёшь в один файл?

Почему файл будет показан только после отработки обоих программ?

Зачем ты создаёшь файл в скрипте, если первый же выхлоп сам его создаст?

Короче, фигня, а не реализация. Пиши ещё. :3

r3lgar ★★★★★ ()
Ответ на: комментарий от r3lgar

Какое ТЗ — такой и код, я откуда знаю, что ему нужно? С такими вопросами — в Job.

К тому же, я сам только начинаю писать на bash, если честно. Спасибо за подсказку про trap, полезная штука.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Данный скрипт не работает так как server при запуске ничего не пишет, а просто ждет. Запуска client. После чего server пишет сообщение и после него client пишет сообщение.

oster2011 ★★★ ()
Последнее исправление: oster2011 (всего исправлений: 2)
Ответ на: комментарий от oster2011
#!/bin/bash
server >> /path/to/some/file1 & client >> /path/to/some/file2
cat /path/to/some/file1 >> /path/to/some/file3
cat /path/to/some/file2 >> /path/to/some/file3
cat /path/to/some/file3
rm /path/to/some/file1
rm /path/to/some/file2
rm /path/to/some/file3
exit

И я сам нуб, тебе нормальное ТЗ бы составить, да в Job.

Vsevolod-linuxoid ★★★★★ ()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 2)
Ответ на: комментарий от Vsevolod-linuxoid

К тому же, я сам только начинаю писать на bash, если честно.

Пиши мне на почту, если будут возникать хитрые вопросы.

Спасибо за подсказку про trap, полезная штука.

Если собираешься писать более-менее серьёзный скрипт, то без trap огребаешь практически сразу.

Какое ТЗ — такой и код

Да я понял, что это лол.

С такими вопросами — в Job.

С такими вопросами на мужской половой орган посылают, просто на ЛОРе Job'ом прикрываются, чтобы не побанили.

r3lgar ★★★★★ ()
mkfifo connection; cat connection# server
cat > connection; rm connection #client
pon4ik ★★★★★ ()
Последнее исправление: pon4ik (всего исправлений: 4)
Ответ на: комментарий от Vsevolod-linuxoid

cat /path/to/some/file1 >> /path/to/some/file3
cat /path/to/some/file2 >> /path/to/some/file3

cat /path/to/some/file1 /path/to/some/file2 >> /path/to/some/file3

И вообще, эти линейные хелловорлды можно и в /bin/sh запускать.

server >> /path/to/some/file1 & client >> /path/to/some/file2

&

ШТА?!

r3lgar ★★★★★ ()
Последнее исправление: r3lgar (всего исправлений: 1)
Ответ на: комментарий от r3lgar

А как нужно? И ТС говорит, что все работает.

Говнокод жуткий, не спорю.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Хватит серить файлами куда попало, открой для себя mktemp.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Хорошо, больше не буду. Я просто только начинаю писать на bash, всего не знаю. Спасибо за совет.

Vsevolod-linuxoid ★★★★★ ()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от beastie

С mktemp нужен trap, чтобы срач за собой подбирать, и не оставлять сиротливые файлы. Вообще, задачу можно решить нормальным способом, но ТС не хочет разбираться, он хочет, чтобы за него всё сделали другие.

r3lgar ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

А как нужно?

& уводит процесс в фон, если ты хочешь сказать «и», то это &&. Но в случае, если сервер вернёт exitcode != 0, то клиент уже не запустится (что в данной задаче нормально).

В остальном как начало сгодится. Но всё равно жесть. (=

r3lgar ★★★★★ ()
Ответ на: комментарий от r3lgar

А есть спека для всех сигналов? Ну или для группы INT, TERM, HANG например?

pon4ik ★★★★★ ()
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от r3lgar
1 && 2

это, насколько я знаю, «запустить 2 после того, как 1 отработает», что не годится для этой задачи. Или я ошибаюсь?

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

если 1 не завершится успешно, запустить 2

anonymous ()
Ответ на: комментарий от anonymous

вообще это всё не про запуск, одинарный амперсанд про параллельный запуск

anonymous ()
Ответ на: комментарий от pon4ik

А есть спека для всех сигналов? Ну или для группы INT, TERM, HANG например?

Даже если она и есть, то не факт, что все поголовно её соблюдают, так что нужно быть внимательным. Я ни разу не искал спеки по сигналам, а просто смотрю кто на что и как реагирует (почти всегда в документации об этом ни слова, и приходится расковыривать код).

r3lgar ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

Тут дело в том, что, исходя из формулировки задачи, клиент зависим от сервера, а сервер может и не запуститься, или запуститься не с теми параметрами, и послать клиент, не отдав ему данные. Потому по уму перед запуском клиента нужно убедиться, что сервер запущен и отвечает. А ещё желательно при смерти сервера убивать клиент. Задача не так проста, как может показаться на первый взгляд.

r3lgar ★★★★★ ()
Ответ на: комментарий от pon4ik
( trap 'rm -f connection' KILL INT QUIT TERM EXIT; mkfifo connection; cat connection ) # server

until ls connection 2>&1 > /dev/null; do sleep 1; echo "wait for connection"; done; cat > connection #client

мвухахаха. Вот это страх. Кароч бери netcat и не парьсо :D

pon4ik ★★★★★ ()
Последнее исправление: pon4ik (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.