1

Если просто написать export PS1="что-то". То вместо первичного приглашения будет  что-то.
Но требуется из-под скрипта или shell программы изменить PS1. То есть пусть есть shell proga

proga
export PS1

далее пишу
chmod +x proga
./proga

или же запускаю proga из-под crontab

Но тут уже PS1 не меняется. И приглашение остается прежним. Так как все-таки сделать так чтобы PS1 изменилась proga й/

2

andr-ok пишет:

proga
export PS1

Что это?

Да, у меня Ubuntu.
Нет, не глючит.

3 (06.12.2012 20:59:15 отредактировано andr-ok)

shell программа под именем proga со строкой export PS1

4

1. Как интерпретатор должен понять, что это шелл-скрипт? (хотя, по-идее,  должен)
2. Какое значение передаётся в скрипте PS1?

Да, у меня Ubuntu.
Нет, не глючит.

5 (06.12.2012 21:13:39 отредактировано andr-ok)

1) chmod +x proga
это строка передает управление файлу прога.
./proga
тут сам вызов проги.
2) Да без разницы. Пусть например PS1=1
Смысл в том, что видимо proga воспринимает PS1 как свою локальную переменную. Поэтому настоящее PS1 и не меняется, а надо

1. Значения переменных не передаются предкам. Только потомкам! Если вы из шела 1 запускаете шелл 2 и в шеле 2 присваиваете значение и даже экспортируете переменную А, то только порожденные шеллом2 процессы будут знать это значение... Предки(шелл1 и шелл 0 и т.д.) не будут об этом даже догадываться.
2. если вы хотите, чтоб сие всегда было у вас в шелkе, то впишите свой export PS1='xpenb' в .bashrc

7

Да, скрипт запускает свой экземпляр шелла. Что бы запустить скрипт в текущей оболочке, используйте точку:

. proga
Да, у меня Ubuntu.
Нет, не глючит.

8

Харитон. Проблема в том что если изменить PS1 в .bashrc. То приглашение изменится только после перезапуска терминала. А мне нужно сразу чтоб менялось

9 (06.12.2012 22:10:34 отредактировано andr-ok)

Serj. Допустим я хочу запусть proga по расписанию, используя crontab. Например в 10 часов 10 минут. Тогда crontab будет выглядеть так.

10 10 * * * . proga

Но это почему -то не приведет к смене PS1.

Хотя просто в shell . proga действительно рабоатет

10

andr-ok пишет:

Но это почему -то не приведет к смене PS1.

Так он выполнится же не из терминала...

Да, у меня Ubuntu.
Нет, не глючит.

11

и как тогда быть

12

andr-ok пишет:

Харитон. Проблема в том что если изменить PS1 в .bashrc. То приглашение изменится только после перезапуска терминала. А мне нужно сразу чтоб менялось

очень просто.
ехпорт пс1="значение"
bash

))))

13

andr-ok пишет:

и как тогда быть

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

14 (07.12.2012 07:56:59 отредактировано andr-ok)

Харитон пишет:

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

Смысл в том что мне нужно заставить PS1 меняться каждые 10 секунд. Например PS1 показывает время, и оно обновляется каждые 10 секунд. Может как-то PROMPT_COMMAND использовать. PS1 пустым оставить, а PROMPT_COMMAND на его место, ток не знаю как реализовать то что надо

15 (07.12.2012 08:51:56 отредактировано zenon)

andr-ok пишет:

и оно обновляется каждые 10 секунд.

Ну спрашивают же, зачем?

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

16

Познаю возможности linux

17 (07.12.2012 09:22:50 отредактировано andr-ok)

А есть ли возможность обновить  в терминале то, что уже написано. Скажем Команда date выводит время. Можно как-то сделать чтоб в режиме ожидания строка которую вывела date менялась в соответствии с показанием часов?

18

andr-ok пишет:

А есть ли возможность обновить  в терминале то, что уже написано. Скажем Команда date выводит время. Можно как-то сделать чтоб в режиме ожидания строка которую вывела date менялась в соответствии с показанием часов?

conky
обновление в 1 секунду

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

19 (07.12.2012 09:44:25 отредактировано andr-ok)

moshell пишет:
andr-ok пишет:

А есть ли возможность обновить  в терминале то, что уже написано. Скажем Команда date выводит время. Можно как-то сделать чтоб в режиме ожидания строка которую вывела date менялась в соответствии с показанием часов?

conky
обновление в 1 секунду

Сама по себе date обновляется раз в секунду, кто спорит. Но если написать echo `date` то что выведится не будет изменяться раз  в секунду. Можно ли как-то изменять?

20

andr-ok пишет:
moshell пишет:
andr-ok пишет:

А есть ли возможность обновить  в терминале то, что уже написано. Скажем Команда date выводит время. Можно как-то сделать чтоб в режиме ожидания строка которую вывела date менялась в соответствии с показанием часов?

conky
обновление в 1 секунду

Сама по себе date обновляется раз в секунду, кто спорит. Но если написать echo `date` то что выведится не будет изменяться раз  в секунду. Можно ли как-то изменять?

зачем?
вы подозреваете, что в линуксах часы идут не так как в других системах?

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

21

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

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

22

Ладно все, я подразобрался. Вопрос можно закрыть

23

терминал - это не поле виджетов где вы помещаете виджет с выводом времени и он вам его там всегда показывает.
терминал - это место для ввода команд. и только результат работы команд сможет вам что-то показать.
если в пс1  прописана дата-время, оно во время прорисовки строки отрисует ее. и все после пока вы будете ждать и вводить команду к месту где был вывод пс1 терминал не вернется, курсор уже находится впереди и соответственно ничего туда вывести не может. нажмите энтер - и у вас отрисуется новая строка с новым временем...

24

Харитон пишет:

терминал - это не поле виджетов где вы помещаете виджет с выводом времени и он вам его там всегда показывает.
терминал - это место для ввода команд. и только результат работы команд сможет вам что-то показать.
если в пс1  прописана дата-время, оно во время прорисовки строки отрисует ее. и все после пока вы будете ждать и вводить команду к месту где был вывод пс1 терминал не вернется, курсор уже находится впереди и соответственно ничего туда вывести не может. нажмите энтер - и у вас отрисуется новая строка с новым временем...

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

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

25

andr-ok пишет:

Скажем Команда date выводит время. Можно как-то сделать чтоб в режиме ожидания строка которую вывела date менялась в соответствии с показанием часов?

watch -n 1 date
while :; do clear; date; sleep 1; done
Был, был и весь вышел...

26

Lupo Alberto пишет:

do clear;

Жульничаете? ab

Да, у меня Ubuntu.
Нет, не глючит.

27

moshell пишет:

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

~/.zshrc

### Приглашения командной строки
# Обычное приглашение
# PROMPT='%~%#=> '
PROMPT=$'%{\e[1;32m%}[%{\e[1;34m%}%~%{\e[1;32m%}]%{\e[1;31m%}%#%{\e[0m%}'
# Приглашение второй строки
PROMPT2='%i%U> '
# Приглашение с правой стороны экрана
if [[ $EUID == 0 ]]; then
    RPROMPT=$'%{\e[1;32m%}[%{\e[1;31m%}%m%{\e[1;32m%}]%{\e[1;32m%}[%{\e[1;33m%}%T%{\e[1;32m%}]%{\e[0m%}'
else
    RPROMPT=$'%{\e[1;32m%}[%{\e[1;34m%}%m%{\e[1;32m%}]%{\e[1;32m%}[%{\e[1;33m%}%T%{\e[1;32m%}]%{\e[0m%}'
fi

http://s005.radikal.ru/i211/1212/9d/fd19e1bf11e3t.jpg

Был, был и весь вышел...

28

вот в этой переменной и хранится значение. для каждого процесса есть своя среда окружения с переменніми в которых хранятся их значения. они либо при старте задаются либо импортируются из экспортируемых переменных у предков...
Пропишите себе export PS1="\[\e]0;\u@\h: \w\a\]\[\033[01;31m\]\t \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$" и увидите много интересного...

29

-=Serj=- пишет:

Жульничаете? ab

А что не так?

Был, был и весь вышел...

30

moshell пишет:

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

http://www.pantz.org/software/shell/enh … rompt.html

Да, у меня Ubuntu.
Нет, не глючит.