No está mostrando el mensaje de error que está recibiendo, pero probablemente sea
grep: método de dispositivos desconocidos
Esto se debe a que, como todos o al menos la mayoría de los otros programas de línea de comandos, grepsupone que todo lo que comienza con una -es una opción e intenta analizarlo como tal. En este caso, -Dse utiliza para instruir grepsobre cómo tratar con un archivo de dispositivo (ver man greppara más detalles). Una forma de evitar esto es usar lo --que indica grepque todo lo que sigue no es un indicador de opción.
Combinando eso con la capacidad PCRE de GNU grep, puede hacer:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
La expresión regular busca -ay lo descarta ( \K), luego la cadena Dapp.name=seguida de tantos caracteres que no sean espacios como sea posible. El resultado es:
Dapp.name=myApp
Si desea myAppguardar la parte en una variable, buscaría eso solo:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
Para asignarlo a una variable:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
Sin embargo, nunca debe ser grepla salida de pseste tipo de cosas, para eso pgrepestá:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
greppatrón comienza con-, debe colocarlo después de la-eopción. De lo contrario, se tratará como una opción. Pero eso solo coincidirá con la palabra-Dapp.name, no con la parte posterior.