sudo -u username -s “cmd arg” restituisce il comando non trovato


10

Ho usato per eseguire il comando:

sudo -u elasticsearch -s "ulimit -Hn"

e stava restituendo il valore di ulimit -Hn visto dall'utente elasticsearch fino a quando non l'ho provato su Ubuntu 11.10. Lì ritorna:

/bin/bash: ulimit -Hn: command not found

Ho provato alcuni comandi diversi e quando uso un argomento ottengo sempre "comando non trovato":

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found

Qualche idea su come posso eseguire un comando che richiede argomenti attraverso sudo?


perché il -s? Mantieni la shell normale e usala per eseguire i comandi. Come sudo -u elasticsearch ls all.sh. Se elasticsearchha una shell predefinita inutilizzabile, utilizzare -s bash prima del comando effettivo.
glglgl,

Risposte:


16

Devi rimuovere le doppie virgolette. Sta cercando di eseguire un comando chiamato "ulimit -Hn" come un singolo comando, spazi e tutti. -sdeve essere l'ultima sudoopzione sulla sudoriga di comando e tutti gli argomenti seguenti vengono passati $SHELL -ca eseguire.

sudo -u elasticsearch -s ulimit -Hn

Immagino che il modo in cui -sviene elaborato sia cambiato, poiché il modo attuale ti consente di passare argomenti con spazi $SHELLsfuggendoli dalla riga di comando:

$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'

Il vecchio metodo di gestione degli argomenti avrebbe diviso quell'argomento '/tmp/foo bar'in due, rompendo il comando.


dove l'hai test che sarebbe non dividere il comando?
Zarathustra,

@Zarathustra È stato cinque anni fa - non ricordo molto indietro. Suggerirei di scavare nella cronologia del codice sorgente di sudo - dovresti essere in grado di trovare quando il comportamento è cambiato.
Camh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.