en este script termino con "$ 1" guardado en el archivo / test.
#!/bin/bash
cat > /test << 'EOF'
$1
EOF
la verdad es que necesito mantener
'EOF'
como 'EOF' porque mi argumento ($ 1) contiene signos de dólar.
pero necesito que se guarde ese argumento en lugar de $ 1
bash
shell-script
cat
here-document
usuario72685
fuente
fuente
$1
) contiene signos de dólar'. No si se refiere al primer parámetro de línea de comando. La sustitución se realizó antes de que se ejecutara el script. Tienes que escapar de él en la línea de comando.cat
y mantener signos de dólar", sino "Quiero modificar elhttpd.conf
para cambiar <alguna configuración> de <esta manera>".Respuestas:
Siguiendo con su pregunta anterior , parece que quiere tanto texto no interpretado como texto interpretado en un archivo. En ese caso, use dos
cat
s (oecho
s) diferentes:Aquí hay un par de cosas: en primer lugar, la sintaxis heredoc con
<<
. Si incluye comillas en esa cadena de terminación, como en la primera de arriba, el heredoc completo no se interpreta, sin parámetros ni sustituciones. Si no usa comillas, como en el segundocat
anterior, las variables como$1
serán reemplazadas por sus valores y las sustituciones de comandos se incluirán en el texto. Usted elige entre citar la cadena "EOF" o no en función de si desea sustituciones o no.Para poner ambos correos
cat
electrónicos en el mismo archivo, estamos usando la>>
redirección para la segunda (y más adelante) redirecciones: eso significa agregar al archivo. Para el primero, usamos un sencillo>
para borrar el archivo y comenzar de nuevo.Tenga en cuenta que, incluso cuando las variables se sustituyen , cualquier signo de dólar adicional en el valor de esa variable no se sustituye nuevamente:
dará salida:
sin sustituir en
$bar
el valor de.Sin embargo, si proporciona un "$" en el argumento de todo este script, debe escapar de él en la línea de comando o encerrarlo todo entre comillas simples. Alternativamente, la sustitución de comandos como en su otra pregunta le permite colocar el contenido de un archivo completo directamente, incluidos los signos de dólar en el contenido del archivo. Asegúrese de citar la cadena de sustitución allí:
obtendrá el cuerpo de
myfile
as$1
y cancat
o entoncesecho
según sea necesario. Se aplican las mismas limitaciones que en mi respuesta : hay un límite para la duración de los argumentos de la línea de comandos, y si su archivo puede ser más largo que eso, debe encontrar otro enfoque. Puede averiguar cuál es el límite en su sistema congetconf ARG_MAX
fuente
Suena como si simplemente quisiera generar una variable en el archivo. En ese caso, esto funcionará:
Tenga
/test
en cuenta que está en el directorio raíz, para el que los usuarios comunes no suelen tener permiso de escritura.EDITAR: tenga en cuenta que necesita citar la cadena que contiene el signo de dólar en la línea de comando . Ahí es donde ocurre la sustitución, y el guión no puede hacer nada al respecto después del hecho.
fuente