Non stai mostrando il messaggio di errore che stai ricevendo ma è probabilmente
grep: metodo di dispositivi sconosciuti
Questo perché, come tutti o almeno la maggior parte degli altri programmi da riga di comando, greppresuppone che tutto ciò che inizia con a -sia un'opzione e cerchi di analizzarlo come tale. In questo caso, -Dviene utilizzato per istruire grepsu come gestire un file del dispositivo (vedere man grepper i dettagli). Un modo per aggirare questo è usare --che dice grepche tutto ciò che segue non è un flag di opzione.
Combinandolo con la capacità PCRE di GNU grep, puoi fare:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
L'espressione regolare cerca a -e la scarta ( \K), quindi la stringa Dapp.name=seguita dal maggior numero possibile di caratteri non spaziali. L'output è:
Dapp.name=myApp
Se si desidera myAppsalvare la parte in una variabile, la cerco da sola:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
Per assegnarlo a una variabile:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
Tuttavia, non dovresti mai grepottenere psquesto tipo di cose, ecco a cosa pgrepservono:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grepmodello inizia con-, è necessario inserirlo dopo l'-eopzione. Altrimenti, verrà trattata come un'opzione. Ma questo corrisponderà solo alla parola-Dapp.name, non alla parte successiva.