2012-02-05 45 views
6

¿cómo puedo leer un archivo de texto y guardarlo en una variable en bash? mi código está aquí:guardar un archivo de texto en una variable en bash

#!/bin/bash 
TEXT="dummy" 
echo "Please, enter your project name" 
read PROJECT_NAME 
mkdir $PROJECT_NAME 
cp -r -f /home/reza/Templates/Template\ Project/* $PROJECT_NAME 
cd $PROJECT_NAME/Latest 
TEXT = `cat configure.ac ` ## problem is here !!! 
CHANGED_TEXT=${TEXT//ProjectName/$PROJECT_NAME} 
echo $CHANGED_TEXT 
+0

posible duplicado de [lea un archivo y guárdelo en la variable utilizando el script de shell] (http://stackoverflow.com/questions/7427262/read-a-file-and-save-it-in-variable-using- shell-script) –

Respuesta

14

El problema es que tiene un espacio extra. La tarea requiere cero espacios entre el operador =. Sin embargo, con bash puede utilizar:

TEXT=$(<configure.ac) 

también querrá asegurarse de que usted cita sus variables para conservar los saltos de línea

CHANGED_TEXT="${TEXT//ProjectName/$PROJECT_NAME}" 
echo "$CHANGED_TEXT" 
+0

funcionó pero tiene un problema: faltan las líneas. Todos los caracteres se convierten en solo 1 línea como [esto] (http://paste.kde.org/200162/) ¿qué debo hacer? – reza

+1

@reza ¿citaron sus variables como mencioné? – SiegeX

3

Trate

TEXT=`cat configure.ac` 

que debería funcionar.

Editar:

Para aclarar, la diferencia está en el espacio: poner un espacio después TEXT causas bash para tratar de mirar hacia arriba como un comando.

1

Para ejecutar un comando y devolver el resultado en la escritura del golpe para el ahorro en una variable, por ejemplo, debe escribir el comando inner para var = $ (comando). Y no debe dar espacios entre var, '=' y $(). Mira este

TEXT=$('cat configure.ac') 

Ahora, echo $TEXT devolver el contenido de configure.ac archivo.

Cuestiones relacionadas