Chcę uruchomić podpowłokę bash, (1) uruchomić kilka poleceń, (2), a następnie pozostać w tej podpowłoce, aby zrobić tak, jak mi się podoba. Mogę wykonać każdą z tych czynności indywidualnie:
Uruchom polecenie za pomocą
-c
flagi:$> bash -c "ls; pwd; <other commands...>"
jednak natychmiast powraca do „super” powłoki po wykonaniu poleceń. Mogę również uruchomić interaktywną podpowłokę:
Rozpocznij nowy
bash
proces:$> bash
i nie opuści podpowłoki, dopóki nie powiem tak wyraźnie ... ale nie mogę uruchomić żadnych początkowych poleceń. Najbliższym rozwiązaniem, jakie znalazłem, jest:
$> bash -c "ls; pwd; <other commands>; exec bash"
co działa, ale nie tak, jak chciałem, ponieważ uruchamia podane polecenia w jednej podpowłoce, a następnie otwiera osobne dla interakcji.
Chcę to zrobić w jednym wierszu. Po wyjściu z podpowłoki powinienem wrócić do zwykłej „super” powłoki bez żadnych incydentów. Musi być jakiś sposób ~~
NB: O co nie pytam ...
- nie pytając, skąd wziąć stronę podręcznika bash
- nie pytam, jak czytać polecenia inicjujące z pliku ... Wiem jak to zrobić, to nie jest rozwiązanie, którego szukam
- nie jestem zainteresowany używaniem ekranu tmux lub gnu
- nie zainteresowany nadaniem kontekstu temu. Tj. Pytanie ma być ogólne, a nie w żadnym konkretnym celu
- jeśli to możliwe, chcę uniknąć stosowania obejść, które pozwalają osiągnąć to, czego chcę, ale w „brudny” sposób. Chcę to zrobić tylko w jednej linii. W szczególności nie chcę robić czegoś takiego
xterm -e 'ls'
exec bash
rozwiązanie obejmuje dwa oddzielne podpowłok. Chcę jedną ciągłą podpowłokę.
exec
polega na tym, że zastępuje pierwszą podpowłokę drugą, więc pozostała tylko 1 powłoka poniżej rodzica. Jeśli komendy inicjujące ustawiają zmienne środowiskowe, będą one istnieć w wykonanej powłoce.
exec
polega na tym, że tracisz wszystko, co nie jest przekazywane do podpowłoki przez środowisko, takie jak nieeksportowane zmienne, funkcje, aliasy, ...
exec bash
rozwiązanie jest dla Ciebie nieodpowiednie?