Napisałem skrypt powłoki o nazwie keepAbcdRunning, którego zadaniem jest sprawdzenie, czy polecenie / proces „abcd” działa, a jeśli tak nie jest, uruchomienie go.
keepAbcdRunning ma postać:
#!/bin/bash
if pgrep -x $1 > /dev/null
then echo "$1 is running"
else echo "calling $2"
$2
fi
exit 0
Jak już napisałem, keepAbcdRunning potrzebuje dwóch argumentów wejściowych, $1
to nazwa polecenia / procesu do sprawdzenia i $2
to polecenie potrzebne do uruchomienia abcd.
abcd sam w sobie jest skryptem, który wykonuje aplikację, która pobiera sformatowany ciąg Json jako dane wejściowe. Gdybym chciał zadzwonić do abcd bezpośrednio z terminala, zadzwoniłbym:
./abcd.sh '{\"type\":\"path\",\"key\":[]}'
Wydaje mi się jednak, że nie jestem w stanie przekazać sekwencji znaków w taki sposób, że abcd.sh jest poprawnie wywoływane z keepAbcdRunning ....
command-line
bash
scripts
json
palce wskazujące
źródło
źródło
./abcd.sh '{\"type\":\"path\",\"key\":[]}`` why?!?!? Use
./abcd.sh -key = wartość -key = wartość` lub nawet./abcd.sh type=value&key=value&path=value
echo $1
w swoim skrypcie, aby zobaczyć, co$1
jest faktycznie przypisane?--option=value
formularz. Zobacz: Najlepszy sposób na parsowanie argumentów wiersza poleceń w Bash (StackOverflow)Odpowiedzi:
Myślę, że to robi: „./abcd.sh '{\ \\" type \\\ ": \\\" path \\\ "\, \\\" key \\\ ": []}'"
Zasadniczo potrzebne
\\ -> \
\ "->"
\, ->,
Wreszcie cała rzecz musiała być w podwójnych cudzysłowach, aby móc mieć pojedyncze cudzysłowy w sekwencji .... https://stackoverflow.com/questions/35063332/insert-single-quote-with-sed
Edycja: To był mój pierwszy raz, kiedy robiłem prawie wszystko ze skryptami / linux / unix / ubuntu, więc posłuchaj mojej rady ze szczyptą soli, ale później odkryłem, że zapisywanie ciągu json do pliku, a następnie przekazywanie odniesienia do tego pliku o wiele prostsze niż próba przekazania samego łańcucha
źródło