LINUX.ORG.RU

Вопросы по bash

 ,


1

1

1) При запуске bash, bash -i, bash -l не заметил разницы.
Но согласно ману:

а) Запущенный с первым символом первого аргумента, являющимся -, bash запускается как login shell.
Почему при этом запуск bash запускается как login и interactive shell?

б) ~/.bashrc дожен читать только interactive shell. Почему при запуске bash и bash -l bash читает ~/.bashrc?

т.е. все варианты запускают login interactive shell.

2) Как правильно запустить bash из параметра запуска ядра init= для выпонения подобного скрипта помещения системы в tmpfs?
init=/bin/bash -c '/путь_к_скрипту' или как?

3) Что означает опция --init-file file у bash'а?

★★★★★

1) посмотри в ~/.bash_profile и /etc/profile, в них может читаться bashrc.

2) Вариант костыльный, но если других не найдётся: сделай программу на C, которая дёргает execl("/bin/bash", "-c", "/путь/к/скрипту").

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

1) посмотри в ~/.bash_profile и /etc/profile, в них может читаться bashrc.

нет

2) Вариант костыльный

почему?

сделай программу на C

когда C изучу...

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

нет

у меня так. Я закомментировал эти строчки — и bashrc перестал загружаться.

почему?

требует перекомпиляции бинарника при изменении пути. Ты уже пробовал варианты init='/bin/bash -c /путь_к_скрипту' и init=/путь_к_скрипту?

#include <unistd.h>
int main() {
	execl("/bin/bash", "-c", "/путь/к/скрипту.sh");
}
NeXTSTEP ★★ ()

а) Запущенный с первым символом первого аргумента, являющимся -, bash запускается как login shell.

Ты всё перепутал, не первого, а нулевого. 'login', который обычно вызывается (exec...) из getty, нулевым параметром подставляет '-'<basename от shell-залогиненного пользователя>, посмотри 'ps -axf', если у тебя есть входы с настоящей консоли, если нет, можешь запустить 'login' из эмулятора.

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

Кстати, можешь запустить bash -lx, чтобы понять, где bashrc читается.

.bashrc там нету

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

требует перекомпиляции бинарника при изменении пути

какой бинарник ты имешеь в виду?

Ты уже пробовал варианты init='/bin/bash -c /путь_к_скрипту' и init=/путь_к_скрипту?

ещё нет

#include <unistd.h>
int main() {
execl(«/bin/bash», "-c", «/путь/к/скрипту.sh»);
}

что это?

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

На самом деле есть, просто её не видно, если ты запускаешь bash из-под bash, не меняя пользователя. Всё, что нужно, уже прочитано и унаследовано. Разницу можно увидеть, например, запуская

su -c '/bin/bash' <др. п.>

и

su -c '/bin/bash -l' <др. п.>

в первом случае не сменится текущий каталог, ну и далее по ману...

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

Сохрани это в файл file.c, скомпилируй gcc file.c -o имябинарника и напиши в параметрах ядра init=/путь/имябинарника

NeXTSTEP ★★ ()

Вот это мне помогло разобраться чем отличаются варианты запуска bash.

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