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ą
-cflagi:$> 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
bashproces:$> bashi 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 bashrozwiązanie obejmuje dwa oddzielne podpowłok. Chcę jedną ciągłą podpowłokę.
execpolega 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.
execpolega na tym, że tracisz wszystko, co nie jest przekazywane do podpowłoki przez środowisko, takie jak nieeksportowane zmienne, funkcje, aliasy, ...
exec bashrozwiązanie jest dla Ciebie nieodpowiednie?