LINUX.ORG.RU

export определённых переменных только для скриптов из указанного каталога

 , ,


0

1

UPD:
Нужно для скриптов, лежащих в определённом каталоге делать определённые export'ы в /etc/profile (или из другого файла).
Т.е. в /etc/profile хочу создать проверку, если путь скрипта совпадат;then export тра-та-та;fi

Такое возможно?

★★★★★

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

если я в /etc/profile прописываю echo «$0», оно срабатывает только в момент после логина. если запустить скрипт, оно не срабатывает. мне же надо про запущенный скрипт как-то это узнавать...
получается, что после форка bash не читает /etc/profile, так что ли? можно сделать чтобы читал?

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

попробовал через BASH-ENV — он в $0 запускаемым скриптом выводит просто 'bash'

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

оно срабатывает только из самого скрипта! как я это через /etc/profile сделаю?

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

есссссс!!! благодарю

сопутствующий вопрос: что из настроек лучше размещать в /etc/profile, а что в .bashrc? man bash прочитал, но кое-какие детали пока не до конца понятны

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

в общем в /etc/profile пришлось сделать . /root/.bashrc — как-то немного костыльно
просто одни и те же переменные требуется по-разному задавать, в зависимости от того, скрипт это из одной директории или просто bash

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

в общем в /etc/profile пришлось сделать . /root/.bashrc — как-то немного костыльно

Ты себе льстишь.

И уточни условие.

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

Таки не понимаешь. Скрипты, которые ты запускаешь руками - наследуют. Которые запускаются кроном, каким-нибудь демоном и т.д. - не читают ни глобальный /etc/profile, ни профиль пользователя, от которого работают.

dhameoelin ★★★★★ ()

bl, joy4eg
а нифига не работают ваши варианты. я по ошибке забыл удалить из тестого скрипта 'echo $0'
ни из /etc/profile, ни из ~/.bashrc не работает ни echo $0, ни readlink /proc/$$/exe для скриптов, только при логине отрабатывает

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

Что значит «для скриптов»? Вы хотите, чтобы каждый раз при запуске любого шелл-скрипта подгружался profile? Так не получится.

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

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

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

Есть такая возможность - прочитать man bash, и узнать, что /etc/profile читается только login-оболочкой, для всех - править /etc/bash/bashrc, причём не в конце, а в начале, потому что у него в стандартной поставке первые же команды - выйти, если оболочка не интерактивная.

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

/etc/bash/bashrc

добавил в начало

echo $0
/usr/bin/readlink /proc/$$/exe
вообще ничего. даже во время логина тишина. даже если просто echo 1

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

Нет, тебе надо просто обеспечить, чтобы у тебя глобально экспортировалась BASH_ENV='что_надо', (а шелл в эмуляторе терминала, как правило, не login-), но и тогда скрипты будут читать это 'что_надо', только если у них в начале '#!/bin/bash', а не '#!/bin/sh'.

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

так мне надо это сделать только для скриптов из определённого каталога

teod0r ★★★★★ ()

Глупая задача == отсутствие решения.

В директории создай файл .init.sh в нем описание переменных.

В каждый скрипт директории добавить

BASE=`dirname $0`
[ -f $BASE/.init.sh ] && . $BASE/.init.sh

Такое решение хоть и требует больше работы, зато переносится легко (не надо помнить о ~/.profile или о чем-то еще)

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

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

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