← Back to team overview

sslug-teknik team mailing list archive

Re: Transmogriffe linux bash scripts til mac bash scripts

 

Den 15-02-2012 19:51, Peter Makholm skrev:
Frank Damgaard<frank_sslug@xxxxxxxxxxxxxx>  writes:

On 2012-02-14 22:18, Eskild Nielsen wrote:
JEg havde lavet en serie af bash scripts på min linux laptop, og ville prøve at køre dem
på en MAC

Succesen var mildest talt behersket, idet  sed virker temmelig anderledes


Mac bruger hverken unix linieskift \n eller windows/Dos \r\n

OS X er en unix og bruger internt \n til at angive linje-skift i
tekstfiler. Det gælder dens evindelige XML-filer, tekstfiler skrevet med
TextEdit og kildetekst skrevet i XCode.

Men de grafiske programmer supporterer vist stadigvæk filer med den den
gamle MacOS konvention transperant for brugeren. Men det er ikke den
normale OSX konvention for linjeskift.

Jeg skulle blandt andet indsætte et linieskift i en textfil, hver gang der var><  i filen

på linux: sed 's!><!>\n<!g' filnavn

men på mac bliver \n ikke opfattet som kontoltegn, men bliver taget for pålydende

Jeg er ikke sikker på hvad posix siger om sed-sproget, men jeg kan godt
reproducere dit problem. Ovenstående virker fint som perl-script, men
perl er heller ikke belastet af forskellige implementationer der tager
små forskellige valg.

Mit bedste bud på en kommando der virker som specificeret er:

$ sed $'s!><!>\\\n<!g' filename

Det virker under både Linux og OS X. Dollar-enkelt plinger er for at få
shellen til at fortolke escape sekvenserne. De to første backslashs
bliver så til en, som sed så ser og derfor gør "det rigtige".

//Makholm


Den skal bestemt prøves

Dollartegnet først på linien - er det prompten - eller skal det med i scriptet?


Follow ups

References