LinuxForum.Fans
Тема

Первичное приглашение. По поводу переменной PS1

Автор: andr-ok 77 сообщений 9213 просмотров 🔒 закрыта
#289091

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

proga
export PS1

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

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

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

#289092
"andr-ok" написал:
proga
export PS1

Что это?

#289096

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

#289098

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

#289099

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

#289110

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

#289112

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

text

. proga
#289113

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

#289114

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

10 10 * * * . proga

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

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

#289115
"andr-ok" написал:
Но это почему -то не приведет к смене PS1.

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

#289116

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

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

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

))))

#289130
andr-ok написал:
и как тогда быть

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

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

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

#289144
"andr-ok" написал:
и оно обновляется каждые 10 секунд.

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

#289147

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

#289148

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

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

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

#289150
moshell написал:
[quote=andr-ok]А есть ли возможность обновить в терминале то, что уже написано. Скажем Команда date выводит время. Можно как-то сделать чтоб в режиме ожидания строка которую вывела date менялась в соответствии с показанием часов?

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

#289151
andr-ok написал:
[quote=moshell][quote=andr-ok]А есть ли возможность обновить в терминале то, что уже написано. Скажем Команда date выводит время. Можно как-то сделать чтоб в режиме ожидания строка которую вывела date менялась в соответствии с показанием часов?

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

Войдите или зарегистрируйтесь, чтобы ответить.