2016-07-26 8 views
1

Hier ist mein Eigentum DateienEigenschaftsdateien nicht ordnungsgemäß in bash verwendet

xxx.properties

SCRIPT_NAME="AAAAA" 
ENVIRON="BBB" 

Hier ist meine sh Datei

yyy.sh

. xxx.properties 
LOG_PREFIX="$SCRIPT_NAME(${ENVIRON})" 
echo $SCRIPT_NAME 
echo $ENVIRON 
echo $LOG_PREFIX 

Wenn Ich laufe yyy.sh, es zeigt

AAAAA 
BBB 
ABBBA <--- weird 

Aber wenn ich Eigenschaftendatei nicht und setzen Variablen in sh-Datei funktioniert es

yyy.sh

SCRIPT_NAME="AAAAA" 
ENVIRON="BBB" 
LOG_PREFIX="$SCRIPT_NAME(${ENVIRON})" 
echo $SCRIPT_NAME 
echo $ENVIRON 
echo $LOG_PREFIX 

Displays

AAAAA 
BBB 
AAAAA(BBB) <-- correct 

, warum es passiert, und wie man das Problem lösen?

Danke!

+0

Ich lief dein Skript auf ubuntu, 3.16.0-49-generiC# 65 ~ 14.04.1-Ubuntu, es funktioniert wie erwartet – pepero

+0

Kannst du 'od -c xxx.properties' ausführen und uns die Ergebnisse anzeigen? – John1024

Antwort

2

Wenn ich das Skript ausführen, bekomme ich das gewünschte Ergebnis:

$ bash yyy.sh 
AAAAA 
BBB 
AAAAA(BBB) 

Wenn ich xxx.properties zu DOS-Format zu konvertieren:

$ sed -i 's/$/\r/' xxx.properties 

und das Skript erneut aus, ich Ergebnisse, die schauen ein wenig ähnlich wie bei Ihnen:

$ bash yyy.sh 
AAAAA 
BBB 
)BBBA 

Dies liegt daran, sowohl SCRIPT_NAME und ENVIRON endet nun mit einem Wagenrücklaufzeichen (\r).

Die Lösung ist dos2unix or similar utility auf xxx.properties ausführen, um DOS-Zeilenenden zu entfernen.

Verwandte Themen