Я хочу запустити bash subshell, (1) виконати кілька команд, (2), а потім залишитись у цій додатковій оболонці робити так, як мені заманеться. Я можу зробити кожен із них окремо:
Запустити команду за допомогою
-c
прапора:$> bash -c "ls; pwd; <other commands...>"
однак він негайно повертається до «супер» оболонки після виконання команд. Я також можу просто запустити інтерактивну підканал:
Почати новий
bash
процес:$> bash
і він не вийде з підшару, поки я не скажу так прямо ... але я не можу запускати жодних початкових команд. Найближче рішення, яке я знайшов:
$> bash -c "ls; pwd; <other commands>; exec bash"
яка працює, але не так, як я цього хотів, оскільки вона виконує задані команди в одній підгруппі, а потім відкриває окрему для взаємодії.
Я хочу це зробити в одному рядку. Як тільки я вийду з нижньої оболонки, я повинен повернутися до звичайної "супер" оболонки без випадків. Має бути спосіб ~~
NB: Що я не прошу ...
- не запитуючи, де взяти сторінку bash man
- не запитуючи, як читати ініціалізаційні команди з файлу ... Я знаю, як це зробити, це не рішення, яке я шукаю
- не зацікавлений у використанні tmux або gnu-екрану
- не зацікавлений в контексті цього. Тобто, питання має бути загальним, а не з якоюсь конкретною метою
- якщо можливо, я хочу уникати використання таких способів вирішення того, що я хочу, але "брудним" способом. Я просто хочу це зробити в одному рядку. Зокрема, я не хочу робити щось подібне
xterm -e 'ls'
exec bash
рішення включає два окремих підрозділи. Я хочу одну безперервну підскладку.
exec
полягає в тому, що вона замінює першу нижню частину корпусу на другу, тож у вас залишилася лише 1 оболонка нижче батьківської. Якщо ваші команди ініціалізації встановлюють змінні середовища, вони існуватимуть у виконаній оболонці.
exec
полягає в тому, що ви втрачаєте все, що не передається на підпрограми через навколишнє середовище, наприклад, неекспортовані змінні, функції, псевдоніми, ...
exec bash
рішення для вас не підходить?