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.