25. maj 2009 - 17:31Der er
10 kommentarer og 1 løsning
Bash concatenation af strings giver uventet output
Hej,
Jeg har følgende script, som jeg kører i bash: FTP_PATH=/mirrors/postfix-release/official/ VERSION=postfix-2.6.1.tar.gz echo $FTP_PATH echo $VERSION echo ${FTP_PATH}${VERSION}
Det giver følgende output: /mirrors/postfix-release/official/ postfix-2.6.1.tar.gz postfix-2.6.1.tar.gzease/official/
Jeg havde forventet at se: /mirrors/postfix-release/official/ postfix-2.6.1.tar.gz /mirrors/postfix-release/official/postfix-2.6.1.tar.gz
Det ser altså ud til at den anden string, ${VERSION}, laver carriage return og dermed overskriver den første string, ${FTP_PATH} - hvordan undgåes dette?
Bash version: GNU bash, version 3.2.39(1)-release (i586-suse-linux-gnu) Copyright (C) 2007 Free Software Foundation, Inc.
Jeg har lige prøvet at kopiere indholdet til et nyt dokument, og så virker det efter hensigten.. Hvis jeg kopierer filen er fejlen der stadig. Der er ingen forskel på mode eller synligt indhold - der er dog forskel i størrelse.
-rw-r--r-- 1 root root 756 May 25 22:49 old.sh -rw-r--r-- 1 root root 721 May 25 22:48 new.sh
Det er lige meget om jeg bruger kate eller vi til at editere, begge er gemt i utf-8. Filen har været editeret i notepad (windows) og har ligget på en NTFS partition.
Notepad benytter så vidt jeg husker carriage return, men at det ligefrem skulle optræde i en linje, som jeg nu (igen) har "sikret" mig ikke indeholder carriage return i sig lyder lidt langt ude. Og med "sikret" mener jeg at genskrive linje... echo ${FTP_PATH}\r${VERSION}
Måske jeg en af de følgende dage vil analysere hvilke ekstra characters, der er i filen, men for nu, må jeg "nøjes" med at oprette en ny fil.
Synes godt om
Slettet bruger
25. maj 2009 - 23:13#5
med echo ${FTP_PATH}\r${VERSION} ville jeg illustrere, hvor \r skulle være for at det hele ville give mening - det er ikke sådan, jeg har genskrevet linjen :).
Prøv lige at åbne dem i en hex editor og sammenlign indholdet der.
Synes godt om
Slettet bruger
26. maj 2009 - 00:06#7
Det har jeg prøvet nu (med et noget simplere eksempel).
Virker: A=a\nB=b\necho $A$B output: ab
Virker ikke: A=a\r\nB=b\r\necho $A$B output: b
Det må næsten være ved assignment A=a\r, så output ($A$B) er a\rb\r - dermed bliver a overskrevet med b. Det er jo lige før, det giver mening det her - bortset fra, hvorfor kate ikke kopierer \r\n, men kun \n over til et nyt dokument.
Og hvis det er fordi du foretrækker Windows editorer så kig på NEdit eller JEdit.
Synes godt om
Slettet bruger
26. maj 2009 - 00:43#11
Det er såmænd fordi jeg er i gang med et linux kursus og ikke lige har fået wireless til at virke og derfor har brugt windows til at browse.
Men vil da kikke på de to editorer.
Endnu engang tak for assistancen.
Vh Mathias.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.