Como rodar isso no sudo?

4

Eu tenho essa linha que eu executo do php

sudo -u db2inst1 -s -- "/opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 \"update EDU.contact set MOBILE_PHONE = '123'\""

funciona bem na versão do Sudo 1.7.2 .

Agora eu tenho um novo servidor com SUSE Linux Enterprise Server 11 (x86_64) . Não havia sudo então eu instalei do repositório (Sudo version 1.6.9p17 ) Mas saiba que a sintaxe acima não funciona. Ele lança bin/bash: /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 "update EDU.contact set MOBILE_PHONE = '123'": No such file or directory

Alguma ideia de como posso fazer isso funcionar?

Se eu executar /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 "update EDU.contact set MOBILE_PHONE = '123'" na conta db2inst1, tudo funcionará bem.

    
por Radek 11.07.2012 / 05:20

1 resposta

4

Eu realmente não tenho certeza porque você está recebendo este erro. Eu tenho um sistema com o sudo 1.8.3, e a documentação diz claramente que algo como sudo -s "echo hi" deveria funcionar, mas não funciona.

A maneira como sempre fiz isso é fazer a mesma coisa -s [command] , mas manualmente.

sudo sh -c 'echo hi'

ou no seu caso

sudo -u db2inst1 sh -c "/opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 \"update EDU.contact set MOBILE_PHONE = '123'\""

É mais compatível, já que o argumento -s nem sempre existe (e infelizmente tenho algumas máquinas realmente antigas funcionando).

Editar:
O que está acontecendo no erro que você está recebendo é que ele está procurando por um executável que é literalmente chamado db2 "update EDU.contact set MOBILE_PHONE = '123'" em um diretório chamado /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin (sim, ele procura db2 connect to PLC; como um diretório). Isso obviamente não existe.

    
por 11.07.2012 / 06:38