LINUX.ORG.RU

запуск скрипта так, чтобы он выполнялся в konsole


0

1

что-то не найти информации.

задача проста- запустить скрипт так, чтобы открылась konsole и показала выполняемые команды.

например нужно

#! /bin/bash
sudo /sbin/rpcbind&& ifup eth0

да так, чтобы я в окне терминала видел выполнение команд.

как такое осуществить?

★★★★★
Ответ на: комментарий от pyometra

Первая часть команды: tty -s

man tty:
Print the file name of the terminal connected to standard input.
-s, --silent, --quiet
print nothing, only return an exit status

(в случае отсутствия терминала возвращается exit code != 0).

Поскольку при запуске скриптов из иксовых программ их stdin не подключается к терминалу (например, ls -l /proc/$(pgrep -fn firefox)/fd/0 покажет путь к stdin'у процесса firefox - у меня это /dev/null), tty завершится с exit code = 1, и bash выполнит вторую часть команды.

Вторая часть команды: exec konsole -e «$0» «$@»

help exec:
exec: exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
Replace the shell with the given command.
Заменить выполняющийся сейчас скрипт другой командой в этом же процессе.

«$0» - argv[0] - команда, как она была запущена (примеры: myscript, ../../zzz/bin/myscript, /usr/local/bin/myscript). Обычно запуском «$0» можно добиться запуска того же исполняемого файла.

«$@» - все собственные аргументы командной строки, отделённые друг от друга.

Подробнее см. man bash и Advanced Bash Scripting Guide.

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

дело в том, что вроде оно, но например если скрипт такой

#! /bin/bash
su root ifup eth0&&echo 1 > /proc/sys/net/ipv4/ip_forward&&iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

то получается, что konsole открывается только для того, чтобы спросить меня пароль рута, не показывая вывод всех команд. скрипт, правда кривой :) я далёк от компьютеров и написал, как мог. еслим поможете, то буду благодарен- цель- при запуске системы пускать этот скрипт и видеть в терминале вывод.

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

set -x в начале (показывать выполняемые команды)
read в конце (считать с клавиатуры строку, т.е. дать пользователю возможность прочитать текст и нажать enter)

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

Я совсем не скриптописатель, возможно кто-то подскажет лучше, но попробуй так (разбить на строки):

#! /bin/bash
echo "Включаем сеть"
su root ifup eth0
echo "бла-бла-бла"
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "бла-бла-бла"
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo "Готово"
sleep 10
Ато может у твоих команд и выхлопа-то нет, а ты ждешь. Последний sleep 10, чтоб терминал сразу не закрывался.

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

vadik

Ато может у твоих команд и выхлопа-то нет

не должно быть выхлопа. Даже если и правило iptables неправильное.

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

не должно быть выхлопа. Даже если и правило iptables неправильное

тогда и смысла в этом нет. спасибо.

AITap

set -x в начале (показывать выполняемые команды)

read в конце (считать с клавиатуры строку, т.е. дать пользователю возможность прочитать текст и нажать enter)

спасибо. полезная информация.

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

set -x в начале (показывать выполняемые команды)

read в конце (считать с клавиатуры строку, т.е. дать пользователю возможность прочитать текст и нажать enter)

спасибо. то, что нужно.

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