Cuando inicio sesión, tengo estos mensajes:
-bash: $'\r' : command not found
-bash: $'\r' : command not found
-bash: $'\r' : command not found
Está bastante claro que es causado por las terminaciones de línea al estilo de Windows en algunos scripts de inicio, por lo que mi pregunta es: ¿Puedo rastrear el script que causa eso y cómo?
Respuestas:
Bash lee varios archivos diferentes al inicio, incluso dependiendo de cómo se inicie ( consulte el manual para ver la descripción ). Luego, hay cosas como esas
/etc/profile.d/
que el shell no lee directamente, pero se puede hacer referencia a ellas desde los otros archivos de inicio en muchas distribuciones.Tendrá que pasar por todo eso, pero afortunadamente, puede hacerlo solo
grep
para el retorno del carro. Pruebe, por ejemplo, algo como:Consulte también ¿Es posible averiguar qué archivos están configurando / agregando a las variables de entorno y su orden de precedencia? por un problema similar
fuente
~/.bash_aliases
strace -e open your-shell
, de la respuestaEl archivo (1) también puede ser útil aquí.
Puedo ver que
signup
necesita eliminar esas molestas terminaciones de línea CRLF de Windows.Para un recursivo directamente como
/home/username
probablemente podría combinar confind
yxargs
(y tal vez un grep, también):fuente
Otro método es tomar todos los scripts de inicio mencionados y hacer eco de una cadena que identifica cada uno al comienzo de cada uno.
Luego, al iniciar sesión, verá algo como esto:
En ese punto, puede concluir que (en el ejemplo anterior)
.bash_aliases
contiene las terminaciones de las líneas ofensivas.Una vez que haya identificado el archivo, pero las líneas problemáticas no saltan a la vista, puede usar el mismo método para rastrear la línea. Haga eco de un mensaje a la mitad del archivo, luego 3/4 o 1/4, dependiendo de la salida. De esa manera puede rastrear la línea, dependiendo de si hace eco antes o después de su eco.
fuente
Considero que la parte difícil de esta pregunta no es "¿cómo puedo encontrar retornos de carro en un archivo?" pero "¿cómo puedo averiguar qué archivos usa mi bashrc?"
Para la segunda pregunta, puede intentar algo como esto:
Esto le mostrará todo lo que hace su bashrc, incluidos todos los archivos a los que se refiere. Es ruidoso, pero debería ayudarlo a localizar qué archivos se están utilizando.
Excepto, de hecho, mis (y muchos otros)
.bashrc
archivos salen temprano si no se ejecutan de manera interactiva, por lo que debe engañarlo para que pase esa verificación:Aquí las
-i
fuerzas de modo interactivo.Para resolver solo los casos en los que obtiene un archivo, algo como esto funciona para mí, pero no puedo prometer que la expresión regular atrapa todo:
Supongo que también puede querer los mensajes de error, así que algo como:
Si por alguna razón nada de esto funcionara, recurriría a
strace -e open bash
algo así, para encontrar cada vez que su sesión de bash abra algún archivo. Pero esa es una solución aún más pesada / ruidosa.fuente