Você teria que escapar das aspas duplas internas:
strcpy(command, "gnome-terminal -e 'sh -c \"ping -c4 google.com\"'");
ou execute diretamente o comando ping
no terminal, sem um shell delimitador:
strcpy(command, "gnome-terminal -e 'ping -c4 google.com'");
Por favor, note que ambas as variantes fecharão a janela do terminal imediatamente após a saída do comando ping
, porque nenhuma delas inicia um shell interativo.
Se você quiser que o terminal permaneça aberto e possa inserir comandos, inicie um shell interativo após ping
sair. Eu não sei porque você escolhe sh
(que aponta para /bin/dash
no Ubuntu) em vez do shell Bash padrão com mais recursos, mas isso não importa. Veja como você pode fazer isso:
strcpy(command, "gnome-terminal -e 'sh -c \"ping -c4 google.com ; sh\"'");
Se você quiser que a janela permaneça aberta até receber um pressionamento de tecla (não permitirá digitar um comando, mas sair imediatamente ao pressionar qualquer tecla), execute o comando read
do Bash depois do ping
, por exemplo. assim:
strcpy(command, "gnome-terminal -e 'bash -c \"ping -c4 google.com ; read -s -n1\"'");
Isso evita que a tecla digitada seja ecoada no terminal e retorna após o primeiro caractere digitado, não aguardando a tecla Enter . Para mais informações sobre read
type help read
em um shell Bash.
Por favor, note que isto não funciona em sh
(Dash) porque read
é específico do Bash.