Jak przekazać sekwencję znaków ./abcd.sh '{\ „type \”: \ „path \”, \ „key \”: []}' jako argument skryptu?

-1

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, $1to nazwa polecenia / procesu do sprawdzenia i $2to 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 ....

palce wskazujące
źródło
2
./abcd.sh '{\"type\":\"path\",\"key\":[]}`` why?!?!? Use ./abcd.sh -key = wartość -key = wartość` lub nawet./abcd.sh type=value&key=value&path=value
Rinzwind
Czy kiedykolwiek pracowałeś echo $1w swoim skrypcie, aby zobaczyć, co $1jest faktycznie przypisane?
Thomas
@Thomas - tak, i próbowałem mnóstwo kombinacji (za 2 USD), ale myślę, że w końcu jest pęknięty ....
indeksujący
Dlaczego unikasz podwójnych cudzysłowów? Ponadto, co powiedział @Rinzwind: Będzie o wiele, wiele lepiej mieć tylko standardowy --option=valueformularz. Zobacz: Najlepszy sposób na parsowanie argumentów wiersza poleceń w Bash (StackOverflow)
UniversallyUniqueID
Muszę wyznać, że jako zupełny początkujący komentarz @ Rinzwinda przeszedł mi przez głowę ... aby jeszcze bardziej pokazać moją naiwność, ostatecznie ostatecznie całość nazywa się wykonywalnym matlabem, który przynajmniej obecnie nie może przeanalizować argumentów formy - -opcja = wartość. Czy pomysł polegałby na przekazaniu argumentów w tej formie Bashowi (keepAbcdRunning.sh), a następnie sformatowaniu ich w formacie json, gotowym do przekazania do Matlaba (abcd)?
indeksujący

Odpowiedzi:

0

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

palce wskazujące
źródło