Porównaj ceny domen i usług IT, sprzedawców z całego świata

Po co używać bash -c w superwizorze zamiast bezpośrednio wywoływać skrypt?


Zaczynam używać
       supervisord
do zarządzania usługami na moim serwerze. Nie jestem profesjonalnym użytkownikiem Linuksa, ale całkiem nieźle sobie z tym radzę i uruchamiam.
Z ciekawości zauważyłem, że większość poleceń w supervisordzie wygląda tak:
[program:install]
command=bash -c "/src/etc/install.sh"

Czytałem Basza i wiem o tym
       -c
należy używać do wstawiania zmiennych przekazywanych za wierszem.
Więc jaki jest sens używania
       bash -c
w przełożonym (lub gdziekolwiek indziej) zamiast bezpośredniego wywoływania skryptu (jak w przykładzie poniżej), biorąc pod uwagę, że żadne zmienne nie zostały przekazane/użyte?
[program:install]
command=/src/etc/install.sh

Dzięki!
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możliwości powłoki, takie jak rozwijanie nazw plików (
         *
,
         ?
), listy poleceń (
         ;
,
         &&
,
         ||
), przekierowanie (
         <
,
         >
,
         |
,) nie są implementowane przez nadzorcę, który dzieli polecenie tylko na tablicę ciągów argumentów.
W
         bash -c
może być po prostu pomocą dla początkującego użytkownika, który może pokusić się o skorzystanie z takich funkcji w zespole. Na przykład unika tej niespodzianki
command=echo foo >/tmp/bar

wyjścia
         foo >/tmp/bar
zamiast pisać
         foo
do
/tmp/bar
.
         -c
ma niewiele wspólnego ze zmiennymi. Wszelkie dodatkowe argumenty do basha będą dostępne tylko jako argumenty skryptu.
         $0
,
         $1
itp. w poleceniu, ale ta funkcja jest rzadko używana. na przykład
         bash -c 'echo $0 $0' foo
wyjścia
         foo foo
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To jest wyjaśnione

w dokumentacji
http://supervisord.org/subproc ... nment
:

Żadna powłoka nie jest wykonywana przez nadzorcę podczas uruchamiania podprocesu, więc zmienne środowiskowe, takie jak USER, PATH, HOME, SHELL, LOGNAME itp. Nie są zmieniane z wartości domyślnych ani w inny sposób przypisywane. Jest to szczególnie ważne w przypadku uruchamiania programu od administratora działającego jako root z sekcją user = w konfiguracji.

Aby obejść ten problem
         bash -c
może być użyty.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się