Umieść blok kodu bash w podpowłoce

1

Miałem nadzieję, że to zadziała:

echo "starting";
{
 cd "$HOME/foobar"
 echo "rolo" > file.txt
}
echo "ending";

gdzie kod podpowłoki miałby miejsce między nawiasami klamrowymi, ale ta składnia wydaje się niepoprawna, jak mogę to zrobić?

Alexander Mills
źródło
Używaj parens zamiast aparatu ortodontycznego
Eric Renouf
nie ma nic złego w nawiasach klamrowych w twoim przykładzie, działa, nie ma błędu składniowego. Co dostajesz jako błąd. wiadomość?
Tagwint
Lepszym pytaniem jest, dlaczego w pierwszej kolejności potrzebujesz podpowłoki? Czy potrafisz wyjaśnić kontekst tego, co naprawdę próbujesz osiągnąć?
Sergiy Kolodyazhnyy
Chciałem tylko uruchomić kilka poleceń, które nie wpłynęłyby na inne polecenia, to wszystko
Alexander Mills,

Odpowiedzi:

1

Zgodnie z dokumentacją bash możesz użyć grupowania w nawiasach lub nawiasach klamrowych, ale jeśli użyjesz nawiasów, otrzymasz zamiast tego podpowłokę. Aby uruchomić polecenia w podpowłoce, użyj:

echo "starting"
(
    cd "$HOME/foobar"
    echo "rolo" > file.txt
)
echo "ending"

chociaż w tym przykładzie możesz po prostu

echo "rolo" > "$HOME/foobar/file.txt"
Eric Renouf
źródło
tak, tak, przykład został wymyślony ... w niektórych przypadkach musimy cd, aby zainstalować rzeczy łatwiej, więc tak
Alexander Mills
2
@AlexanderMills, rzeczywiście, rozważ pushdi popdzamiast cdtych przypadków jako inne możliwe rozwiązanie
Eric Renouf
tak dzięki, jaka jest główna zaleta pushd/ popd?
Alexander Mills,
1
Zrobią płytę cd i „uncd” bez konieczności jawnego śledzenia, gdzie wrócić i bez konieczności tworzenia podpowłoki
Eric Renouf
Ach, okej, spróbuję
Alexander Mills,