Scripting UNIX-Shell


2

Durante l'esecuzione dello script seguente, viene visualizzato un errore:

Errore di sintassi alla riga 1: `('non previsto.

sudo su - user1 -c "cd $HOME ; tar -cvf $HOME/mine.tar `cat /tmp/$LOGNAME/List`  "

dove File elenco contiene il nome di alcuni altri file.

Per favore, aiutami con qualche soluzione.

Saluti, Vertice


commandlinefu.com
djangofan

Tecnica di debug standard: analizza il problema fino a trovare l'esempio più piccolo che lo causa. Cosa succede se dici sudo su - user1 -c date? Che ne dici di sudo su - user1 -c she quindi digitare cd $HOME ; tar -cvf $HOME/mine.tar `cat /tmp/$LOGNAME/List`nella shell?
Scott,

1
domanda anche su StackOverflow
Glenn Jackman,

Perché il cd $HOME? Hai già un -f $HOME/mine.tarnel comando.
Hennes,

Risposte:


0

La tua shell sta espandendo le cose troppo presto.

Non $LOGNAMEhanno una (in esso? O il contenuto di /tmp/$LOGNAME/List?

Bash si espanderà $HOMEe $LOGNAMEprima che vengano passati a su- quando supoi cerca di passarli a , sho bashhanno token impropri in loro.


0

Si prega di eseguire i comandi a riga singola su più righe ed eseguirli, come scrivere questo su run.sh

#!/usr/bin/env bash
cd $HOME
tar -cvf $HOME/mine.tar
cat /tmp/$LOGNAME/List

Dare il permesso di esecuzione ( chmod +x run.sh) ed eseguire quello script comesh path to the file(run.sh)

ad es .: sh /home/run.sh


2
Due punti minori: 1) Non è necessario renderlo eseguibile o aggiungere la linea shebang se la esegui sh scriptfile. 2) sh potrebbe non essere bash, quindi in questo esempio sh run.she /home/run.shpotrebbe correre in diverse conchiglie. Questo è importante per gli script più complessi che potrebbero tentare di utilizzare le funzionalità solo bash.
Hennes,

Lo dico nel caso di bash.
mailer
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.