mboost-dp1
linux script fejl - cp
- Forside
- ⟨
- Forum
- ⟨
- Support
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;
fejlen er:
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..
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..
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
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
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?
Jeg viste hvordan begge kunne gøres i #2Qw_freak (3) skrev:Ohh ja, den må jeg heller rette, returnerer cp noget jeg kan checke på?
Hvordan resetter jeg text formateringen?
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
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.