Você usou um substituição de variável fora de aspas duplas. Não faça isso. Como $pname
está sem aspas, seu valor é dividido em caracteres de espaços em branco, portanto, pkill
obtém os argumentos -9
, -f
, java
, -Xmx512m
, -XX:MaxPermSize=128m
, -cp
, /local/toto//conf/:/local/toto//lib/*
, com.toto.main.entry.Launchtoto
, processToto
. Naturalmente pkill
reclama quando atinge a opção -X
que não entende.
Basta passar o valor de pname
como argumento para pkill
, ou seja,
/usr/bin/sudo -u toto /usr/bin/pkill -9 -f "$pname"
Quanto ao prompt de senha sudo, minha bola de cristal me diz que você colocou a entrada NOPASSWD
antes de outra entrada sem NOPASSWD
para o mesmo usuário. A entrada NOPASSWD
precisa ser a última. Veja Como executar um específico programa como root sem um prompt de senha?