O problema é que o alias é primeiro interpretado pelo Bash e depois pelo XTerm.
O Bash interpreta todo o alias como dois comandos separados: xterm -e sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml
e /opt/king-phisher/KingPhisher
, e os comandos são executados um após o outro no shell atual.
Usar &
em vez de ;
não ajudará, porque o Bash ainda interpretará &
; O escape de ;
ou &
também não ajuda, porque o XTerm não tem noção da sintaxe Bash e passará ;
ou &
como um argumento para /opt/king-phisher/KingPhisherServer
(juntamente com o restante do comando, /opt/king-phisher/KingPhisher
).
A única solução é dizer ao XTerm para invocar o Bash e deixar o Bash fazer a análise:
alias kingp="xterm -e bash -c 'sudo /opt/king-phisher/KingPhisherServer -L INFO -f /opt/king-$/king-phisher/server_config.yml & /opt/king-phisher/KingPhisher'"
A menos que o usuário não precise fornecer uma sudo
senha para executar /opt/king-phisher/KingPhisherServer
, isso fará com que o servidor não inicie devido ao comando sudo
ser antecedido antes de poder ler a senha; veja aqui para possíveis soluções: Como executo um comando sudo precisando de entrada de senha em segundo plano? .