Errore 127 durante l’esecuzione di comandi UNIX tramite Apple Remote Desktop

Apple Remote Desktop (ARD) permette di inviare in remoto comandi UNIX a client MacOS X. Tuttavia può capitare che dopo aver provato ad eseguire un determinato comando venga restituito come output il seguente errore:

Error 127 “bin/bash: line n:***:command not found

Dove n è il numero di linea dello script dove è presente il comando non riconosciuto e *** è il nome del comando.

In questi casi si tratta probabilmente di un problema di variabili di ambiente, frequente soprattutto quando lo script viene fatto eseguire in remoto con l’account “root”. Infatti in ARD non è possibile utilizzare direttamente il comando “sudo” per l’esecuzione con privilegi elevati, quindi è necessario riportare il solo comando e selezionare per l’esecuzione l’account di sistema “root”.

Determinazione e inserimento del percorso dell’eseguibile

Prima di tutto è necessario spostarsi in un client, aprire il terminale e digitare il comando:

which nomecomando

Dopo aver confermato verrà visualizzato il percorso dove è collocato l’eseguibile.

A questo punto è necessario inserire il percorso nella variabile di ambiente $path del profilo remoto utilizzato da ARD. Per fare questo è sufficiente aprire il task “Send UNIX command” di ARD e aggiungere nello script, prima del comando, una riga di questo tipo:

export PATH=percorso:$path

Ad esempio se il percorso dell’eseguibile è /usr/local/bin è necessario inserire all’inizio dello script la riga:

export PATH=/usr/local/bin:$path

A questo punto eseguendo nuovamente il task di ARD non dovrebbe essere più presente l’errore, in quanto il profilo remoto è in grado di riconoscere il percorso dell’eseguibile.

Inserimento di percorsi multipli

In alcuni casi potrebbe esserci la necessità di aggiungere più percorsi (ad esempio per la corretta esecuzione del comando o per consentire l’esecuzione di più comandi all’interno dello stesso script), in tal caso utilizzare la sintassi:

export PATH=percorso1:percorso2:percorso3:$path

Teoricamente non c’è limite al numero di percorsi che è possibile aggiungere, l’importante è che siano sempre separati dal carattere “:”.

Inserimento di tutti i percorsi di un profilo locale funzionante

E’ tuttavia possibile che alcuni comandi vengano effettivamente riconosciuti, ma restituiscano comunque errore durante l’esecuzione sempre a causa di percorsi mancanti. Poiché la ricerca manuale dei percorsi utilizzati internamente da un determinato comando spesso è complessa, è preferibile utilizzare piuttosto un workaround.

Spostarsi in un computer client e accertarsi che il comando funzioni correttamente utilizzando direttamente il terminale. Una volta constatato ciò eseguire il comando:

env

Nell’output cercare la riga che inizia con “PATH=…….”.

Copiare tutti i percorsi presenti in questa riga (notare che sono già separati dal carattere “:”) e tornare nel task di ARD sul server.

Ad esempio:

PATH=/usr/bin:/bin:/usr/sbin:/sbin

I percorsi sono evidenziati in rosso.

Inserire prima del comando una riga “export PATH” come illustrato precedentemente inserendo tutti i percorsi annotati (vedi sintassi per percorsi multipli).

A questo punto provando ad eseguire nuovamente il comando remoto non dovrebbe venir restituito alcun errore. Ovviamente è necessario comunque verificare il corretto funzionamento del comando in quanto potrebbero esserci altre dipendenze non trattate in questo articolo.

Script di esempio che utilizza l’inserimento di tutti i percorsi locali nella variabile path per permettere l’installazione di un plugin del software “node” (notare anche l’utilizzo dell’account “root” invece del comando “sudo”):

comando_unix

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *