mboost-dp1

linux script fejl - cp


Gå til bund
Gravatar #1 - Qw_freak
28. nov. 2012 09:15
Jeg har et script som skal copiere en fil fra en folder til en anden, eneste problem er at modtagerfolderen indeholder mellem rum som SKAL være der. (windows folder)

scriptet det fejler er;

MFGPWD="/home/sml/MFG-tool/Produktion/Profiles/MX53\ Linux Update/OS Firmware"
TIME1=`stat -c %Y /var/lib/tftpboot/uImage`
TIME2=`stat -c %Y arch/arm/boot/uImage`

if [ $TIME2 -gt $TIME1 ] ;then
if [ -d $TFTPPWD ]; then
echo "copying uimage to tftp folder --- "$TFTPPWD
cp arch/arm/boot/uImage $MFGPWD #$TFTPPWD
echo -e "\033[32m uImage copyed to tftp folder --- "$TFTPPWD" \033[37m "
fi
else
echo -e "\033[31m No new uImage was built \033[37m "
fi



fejlen er:


cp: target `Firmware' is not a directory


Jeg har prøvet forskellige ting som at escape mellemrummene, og også dobbelt escape dem, men der er ikke noget af det jeg kan få til at virke..
Gravatar #2 - kasperd
28. nov. 2012 09:44
Når du bruger en variabel er det næsten altid en god idé at sætte dobbeltquotes omkring. Der må gerne stå andet mellem de dobbeltquotes.

F.eks. er din første echo kommando forkert. Den sidste dobbeltquote skal stå efter variablen, ikke før.

Hvis der kan være tvivl om hvilke tegn der er variablens navn, og hvad der blot er tekst efter variablen, så kan man sætte {} omkring variablens navn. Nogen synes at man bør gøre det konsekvent.

Der var også et par andre fejl. F.eks. manglede en #! linje i startern, der udskrives en besked om success selvom der var en fejl, og du reseter ikke tekstformatteringen.

Her er de ændringer jeg lige kunne få øje på skulle til:

[code]#!/bin/bash
MFGPWD="/home/sml/MFG-tool/Produktion/Profiles/
MX53\ Linux Update/OS Firmware"
TIME1=`stat -c %Y /var/lib/tftpboot/uImage`
TIME2=`stat -c %Y arch/arm/boot/uImage`

if [ $TIME2 -gt $TIME1 ] ;then
if [ -d "${TFTPPWD}" ]; then
echo "copying uimage to tftp folder --- ${TFTPPWD}"
if cp arch/arm/boot/uImage "${MFGPWD}"; then
echo -e "\033[32m uImage copyed to tftp folder --- $TFTPPWD\033[0m"
else
echo "Error copying image" 1>&2
fi
fi
else
echo -e "\033[31m No new uImage was built \033[0m "
fi
Gravatar #3 - Qw_freak
28. nov. 2012 09:59
kasperd (2) skrev:
Der var også et par andre fejl. F.eks. manglede en #! linje i startern


Det er fordi jeg har en masse exports i starten af scriptet som der ikke er grund til at fylde coden ud med her. :)


kasperd (2) skrev:
Hvis der kan være tvivl om hvilke tegn der er variablens navn, og hvad der blot er tekst efter variablen, så kan man sætte {} omkring variablens navn. Nogen synes at man bør gøre det konsekvent.

Det vil jeg gøre fremover.
kasperd (2) skrev:
Der var også et par andre fejl. F.eks. manglede en #! linje i startern, der udskrives en besked om success selvom der var en fejl, og du reseter ikke tekstformatteringen.

Ohh ja, den må jeg heller rette, returnerer cp noget jeg kan checke på?
Hvordan resetter jeg text formateringen?
Gravatar #4 - kasperd
28. nov. 2012 10:32
Qw_freak (3) skrev:
Ohh ja, den må jeg heller rette, returnerer cp noget jeg kan checke på?
Hvordan resetter jeg text formateringen?
Jeg viste hvordan begge kunne gøres i #2

Du kan bruge en if konstruktion med cp kommandoen og skrive forskellig besked afhængig af om det gik godt eller skidt. En anden mulighed er at bruge -e som parameter til bash i #! linjen. Så vil scriptet stoppe ved den første fejl som man ikke selv checker for.

I dette eksempel vil den første kommando der fejler (false) accepteres fordi den checkes med en if kommando. Men den anden false kommando bliver ikke checket og scriptet stopper. Uden -e ville scriptet fortsætte efter den anden false kommando.
#!/bin/bash -e
true
if false ; then
echo nej
else
echo ja
fi
if true ; then
echo ja
false
echo nej
fi
echo nej


Tekstformateringen nulstilles med ANSI rendering kode 0. \033[0m
Gravatar #5 - Qw_freak
28. nov. 2012 19:00
kasperd (4) skrev:
Jeg viste hvordan begge kunne gøres i #2

dammit, så jeg slet ikke... sry.

Tak for info.. :)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login