Uruchamiam następujący skrypt:
VAR="Test"
sh -c 'echo "Hello $VAR"'
Ale dostaję:
# ./test.sh
Hello
Jak mogę wysłać zmienną VAR
mojego skryptu do utworzonej powłoki sh -c '...'
?
shell
shell-script
scripting
Matthieu Napoli
źródło
źródło
export var="Test"
w jednym wierszu.Oto jeszcze inny sposób przekazywania zmiennych
sh -c
(jako argumentów pozycyjnych):źródło
$@
to pracę zgodnie z oczekiwaniami, np.sh -c 'echo "Hello $@"' _ "$VAR" "$VAR2"
`$0
jest ono wyświetlane w komunikatach o błędach / ostrzeżeniach przez powłokę.Jeśli nie chcesz eksportować ich jako zmiennych środowiskowych, oto sztuczka, którą możesz zrobić. Zapisz definicję variabe w pliku
.var_init.sh
i umieść ją w podpowłoce w następujący sposób:.var_init.sh
z linii poleceń:
W ten sposób ustawiasz zmienne tylko przy wykonywaniu podpowłoki.
źródło
ENV=.var_ini.sh sh -c '...'
.var_init.sh
oczekuje się tego w bieżącym katalogu (w przeciwieństwie do$PATH
), należy napisać. ./var_init.sh