Вы не видите сообщение об ошибке, которое вы получаете, но это, вероятно,
grep: метод неизвестных устройств
Это связано с тем, что, как и во всех или, по крайней мере, в большинстве других программ командной строки, grepпредполагается, что все, что начинается с a, -является опцией и пытается проанализировать его как таковое. В этом случае -Dиспользуется для указания grepтого, как обращаться с файлом устройства (см. man grepПодробности). Одним из способов обойти это является использование, --которое говорит, grepчто все, что следует, не является флагом опции.
Комбинируя это с возможностью GNU PCRE grep, вы можете сделать:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
Регулярное выражение ищет a -и отбрасывает его ( \K), затем за строкой Dapp.name=следует как можно больше непробельных символов. Выход:
Dapp.name=myApp
Если вы хотите, чтобы myAppчасть была сохранена в переменной, я бы искал это один:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
Чтобы назначить его переменной:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
Тем не менее, вы никогда не должны grepвыводить psдля такого рода вещи, вот для чего pgrep:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grepшаблон начинается с-, вам нужно поставить его после-eопции. В противном случае это будет рассматриваться как вариант. Но это будет соответствовать слову-Dapp.name, а не части после него.