1

Когда я звоню:

execl("/bin/sh", "/bin/sh", (void *) NULL);

Запускается программа /bin /sh /, которая открывает оболочку, в которой я могу набирать команды. Однако, если я позвоню:

execl("/bin/sh", "/bin/sh", "~/somescript.sh", (char *) 0 );

Программа /bin /sh также запускается и запускает данный сценарий оболочки, но затем закрывается.

Почему оболочка не остается открытой после запуска сценария оболочки? Есть ли способ сохранить его открытым после запуска скрипта?

Заранее спасибо!

2 ответа2

3

Это нормальное поведение оболочки, которое не имеет ничего общего с тем, что вы запускаете его из C - это происходит, даже если вы запускаете оболочку со сценарием из командной строки:

$ sh ~/somescript.sh

После этого может быть трудно заставить оболочку оставаться в интерактивном режиме. Я нашел только параметр --rcfile [file] чтобы сделать это:

Выполняйте команды из файла вместо общесистемного файла инициализации /etc/bash.bashrc и стандартного личного файла инициализации ~/.bashrc если оболочка является интерактивной (см. ПРИЗНАНИЕ ниже).

Т.е. ты бы сделал

$ sh --rcfile ~/somescript.sh

Но ваши системные rc-файлы, такие как /etc/bash.bashrc и ~/.bashrc , в этом случае не запускаются.

-1

Как насчет запуска интерактивной оболочки в конце вашего скрипта?

#!/bin/sh

echo STUFF
echo MORE STUFF
sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .