Mam wiersz poleceń, który wyświetla inny wiersz poleceń, na przykład:
> commandlineA param1 param2
commandlineB param1
Chciałbym mieć jedno wykonanie wiersza poleceń, które uruchomi wiersz poleceń B z podanymi parametrami.
Czy jest jakiś prosty sposób, aby to zrobić za pomocą jednego wiersza poleceń, czy też muszę uruchomić mały plik bash, który zapisze dane wyjściowe w zmiennej, a następnie uruchom go?
Dzięki
ubuntu
command-line
bash
Lior Ohana
źródło
źródło
Odpowiedzi:
Wygląda na to, że sam to wypracowałeś, ale możesz użyć:
Edycja edycji: poniżej jest nieco źle, chociaż uruchamia polecenie w podpowłoce, okazuje się, że zmienne środowiskowe będą nadal dostępne. Przepraszam za wprowadzających w błąd ludzi ...
Edycja: która będzie działać w podpowłoce, żadne niewyportowane zmienne środowiskowe nie będą używane. Jeśli chcesz uruchomić polecenie w tej samej powłoce, musisz użyć:
Inną odpowiedzią jest przepuszczenie samego basha:
Będzie to również działać w podpowłoce, aby działać w tej samej powłoce, której potrzebujesz:
Nawiasem mówiąc, zamiast składni $ () możesz także użyć tylnych znaczników, ale nie jest to zalecane .
źródło
eval
. Jeśli masz powód, wyjaśnij to. (3) Twój ostatni przykład (z-c
) jest całkowicie błędny.Użyj tego:
Przykład:
Wynik:
źródło
$(commandlineA param1 param2)
printf '\143\144\040\057\n' | bash
jest ostatecznie nieobsługiwany, ponieważ polecenie jest wykonywane w nowym, osobnym (i przejściowym) procesie powłoki. Z kolei$(printf '\143\144\040\057\n')
spowoduje, że bieżąca, aktywna, interaktywna powłoka zmieni katalog.