przekazywanie parametrów do bash podczas wykonywania skryptu pobieranego przez curl
Wiem jak wykonać zdalny skrypt bash, za pomocą tych składni:
curl http://foo.com/script.sh | bash
Lub
bash < <( curl http://foo.com/script.sh )
Które dają ten sam wynik.
Ale co jeśli muszę przekazać argumenty do skryptu bash ? Jest to możliwe, gdy skrypt jest zapisywany lokalnie:
./script.sh argument1 argument2
Wypróbowałem kilka możliwości takich jak ta, bez powodzenia:
bash < <( curl http://foo.com/script.sh ) argument1 argument2
3 answers
Try
curl http://foo.com/script.sh | bash -s arg1 arg2
Instrukcja Bash mówi:
Jeśli istnieje opcja-s lub jeśli po przetworzeniu opcji nie pozostały żadne argumenty, to polecenia są odczytywane ze standardowego wejścia. Opcja ta umożliwia ustawienie parametrów pozycyjnych podczas wywoływania interaktywnej powłoki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-10 01:19:47
Aby poprawić odpowiedź jinowolskiego trochę, powinieneś użyć:
curl http://example.com/script.sh | bash -s -- arg1 arg2
Zwróć uwagę na dwa myślniki ( -- ), które mówią bashowi, aby nie przetwarzał niczego po nim jako argumentów do Basha.
W ten sposób będzie działać z dowolnymi argumentami, np.:
curl -L http://bootstrap.saltstack.org | bash -s -- -M -N stable
Będzie to oczywiście działać z każdym rodzajem wprowadzania przez stdin, a nie tylko curl, więc możesz potwierdzić, że działa z prostym skryptem BASH wprowadzanym przez echo:
echo 'i=1; for a in $@; do echo "$i = $a"; i=$((i+1)); done' | \
bash -s -- -a1 -a2 -a3 --long some_text
Da ci wyjście
1 = -a1
2 = -a2
3 = -a3
4 = --long
5 = some_text
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-29 07:11:17
Inne alternatywy:
curl http://foo.com/script.sh | bash /dev/stdin arguments
bash <( curl http://foo.com/script.sh ) arguments
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-10 01:20:32