Если сценарий выполняется как отдельная программа, то любые перенаправления не переживут завершения процесса; они будут применяться только к неявному /bin/bash yourscript.sh
, а не к интерактивной оболочке, запущенной пользователем. Это нормальный случай. Единственное, что может вызвать проблему, это если сценарий был прочитан с помощью source yourscript.sh
или подобным образом, чего обычно делать не следует.
El archivo ya tiene una nueva línea al final, terminando la línea final. Cualquier cosa que se le agregue, por lo tanto, viene en otra línea. Deberá sobrescribir la nueva línea final, lo que no puede hacer con solo una redirección >>
. Probablemente el más fácil de usarsed
:
$ seq 1 4 | sed -e '$s,$,stuff/to/append,'
1
2
3
4stuff/to/append
Para que sed
modifique un archivo en el lugar -, use
sed -i -e '$s,$,stuff/to/append,' filename
(Los signos de dólar tienen dos significados allí. El primero $
es una dirección que controla en qué línea se ejecuta el siguiente comando, aquí significa la última línea. El segundo $
es la notación de expresiones regulares para el final de la línea.)
Para agregar a alguna otra línea que no sea la última, reemplace la primera $
con un número de línea o una coincidencia de patrón. Esto agregaría una cadena a cualquier línea que contengafoo
:
sed -i -e '/foo/ s,$,stuff/to/append,' filename
Tenga en cuenta que usé comas aquí como separadores para el comando s
. Las barras serían más comunes,pero el texto que se añadirá los contiene. El comando s
permite usar (casi )cualquier carácter.
Si tiene barras en el patrón utilizado para encontrar la línea correcta, puede usar algo como \,foo,
como dirección, es decir, comenzar con una barra invertida y usar cualquier separador que sea conveniente.
en lugar de echo usa printf, este no agrega "\n" por defecto
tenga en cuenta que printf es un comando de bash, así que asegúrese de que su shell lo admita
Si desea modificar un archivo existente, puede utilizar el comando sed
.
Dado que tiene tanto su cadena para agregar como el número de línea que desea insertar en la cadena:
mystring=":/etc/simmerin/bin/"
lineno=10
Inserte la cadena al principio de la línea:
sed "${lineno}s,^,${mystring}," file
Inserte la cadena al final de la línea:
sed "${lineno}s,\$,${mystring}," file
Inserte la cadena antes de la línea:
sed "${lineno}s,^,${mystring}\n," file
Inserte la cadena después de la línea:
sed "${lineno}s,\$,\n${mystring}," file
Su archivo ya tiene un newline
al final del archivo. El carácter de nueva línea tiene un tamaño de 1 byte :use el comando truncate
para reducir el archivo en un byte y luego agregarlo al final del archivo.
truncate -s -1 filename && echo ":/etc/simmerin/bin/" >> filename