Wie führt man dies in sudo aus?

Wie führt man dies in sudo aus?

Ich habe diese Zeile, die ich von PHP aus ausführe

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'\""

es funktioniert gut auf der Sudo-Version1.7.2.

Jetzt habe ich einen neuen Server mit SUSE Linux Enterprise Server 11 (x86_64). Es gab kein sudo, also habe ich es aus dem Repository installiert (Sudo-Version1.6.9p17) Aber wissen Sie, dass die obige Syntax nicht funktioniert. Sie wirftbin/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

Irgendeine Idee, wie ich das zum Laufen bringen kann?

Wenn ich es /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 "update EDU.contact set MOBILE_PHONE = '123'"unter dem Konto db2inst1 ausführe, funktioniert alles einwandfrei.

Antwort1

Ich bin mir nicht ganz sicher, warum Sie diesen Fehler erhalten. Ich habe ein System mit sudo 1.8.3 darauf und in der Dokumentation steht eindeutig, dass es sudo -s "echo hi"funktionieren sollte, aber das tut es nicht.

Ich habe es immer so gemacht, dass ich dasselbe -s [command]manuell gemacht habe.

sudo sh -c 'echo hi'

oder in deinem Fall

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'\""

Es ist kompatibler, da dieses -sArgument nicht immer existierte (und ich leider einige wirklich alte Maschinen bei der Arbeit habe).

Bearbeiten:
Was bei dem Fehler passiert, den Sie erhalten, ist, dass nach einer ausführbaren Datei gesucht wird, die buchstäblich db2 "update EDU.contact set MOBILE_PHONE = '123'"in einem Verzeichnis namens /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin(ja, es wird nach db2 connect to PLC;einem Verzeichnis gesucht) benannt ist. Dieses existiert offensichtlich nicht.

verwandte Informationen