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ć?


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"

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.