not mobaxterm found bash shell cygwin newline

mobaxterm - ''/ r'': comando no encontrado-.bashrc/.bash_profile



$''/r'': command not found linux (19)

Tengo ventanas, utilizando Cygwin, intentando configurar JAVA_HOME permanente a través de mi archivo .bashrc .

.bashrc:

export PATH="$JAVA_HOME/bin:$PATH" export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05"

.bash_profile:

if [ -f ~/.bashrc ]; then source ~/.bashrc fi

corriendo cygwin:

-bash: $''/377/376if'': command not found -bash: $''then/r'': command not found : No such file or directorysu//.bashrc -bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: syntax error near unexpected token `fi'' -bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: `fi''

No estoy seguro de si tomé los comandos de un tutorial destinado a otro sistema o si me falta un paso. O el espacio en blanco está causando que mis comandos no se ejecuten correctamente.

He mirado varias preguntas similares pero no he encontrado una en la que la pregunta tenga exactamente mi error.

Mi camino a casa:

$ echo $HOME /cygdrive/c/Users/jhsu $ echo ~ /cygdrive/c/Users/jhsu/

Así que creo que los archivos deben colocarse en el lugar correcto.


Para los usuarios de Emacs:

  1. Abre el archivo
  2. Mx set-buffer-file-coding-system
  3. Seleccione "unix"

Esto actualizará los nuevos caracteres en el archivo para que sean de estilo UNIX. Más información sobre "Representación de Nueva Línea" en Emacs se puede encontrar aquí:

http://ergoemacs.org/emacs/emacs_line_ending_char.html

Nota: Los pasos anteriores podrían realizarse en un script de Emacs si uno prefiere ejecutar esto desde la línea de comandos.


1. Elección

EditorConfig - es mi elección.

2. Relevancia

Esta respuesta es relevante para marzo de 2018. En el futuro, los datos de esta respuesta pueden estar obsoletos.

El autor de esta respuesta usó personalmente EditorConfig en marzo de 2018.

3. Limitaciones

Debe utilizar uno de los editores / IDE compatibles .

4. Argumentación

  1. Simplemente uso. Necesito configurar mi archivo .editorconfig 1 vez, donde creo mi proyecto, → Puedo olvidar algunos problemas específicos de plataforma, estilo e IDE .
  2. Multiplataforma, idiomas cruzados, IDE cruzado, editores cruzados .

5. Ejemplo

5.1. Sencillo

Instalo el complemento EditorConfig para Sublime Text → mi editor de texto. Edito archivos en texto sublime.

Por ejemplo, tengo el archivo sashacrlf.sh :

echo "Sasha" & echo "Goddess!" &

Ejecuto este archivo en Cygwin:

$ bash sashacrlf.sh Sasha sashacrlf.sh: line 1: $''/r'': command not found Goddess!

Creo un archivo .editorconfig en el mismo proyecto que sashacrlf.sh .

[*.sh] end_of_line = lf

Esto significa que, si guarda cualquier archivo con la extensión .sh en su proyecto en su editor, EditorConfig establece los finales de línea UNIX para este archivo.

sashacrlf.sh de sashacrlf.sh en mi editor de texto. Corro sashacrlf.sh nuevo:

$ bash sashacrlf.sh Sasha Goddess!

No puedo obtener resultados inesperados en la consola.

5.2. Extensiones de archivos múltiples

Por ejemplo, quiero tener finales de línea UNIX en todos los archivos con extensiones .sh , .bashrc y .bash_profile . Agrego estas líneas a mi archivo .editorconfig :

[*.{sh,bashrc,bash_profile}] end_of_line = lf

Ahora, si guardo cualquier archivo con extensión .sh , .bashrc o .bash_profile , EditorConfig configurará automáticamente la terminación de línea UNIX para este archivo.

6. Enlaces adicionales


Para aquellos que no tienen dos2unix instalado (y no quieren instalarlo):

Elimine el carácter final que provoca este error:

sed -i ''s//r$//'' filename


Explicación :

La opción -i es para la edición en el lugar , eliminamos el arrastre directamente en el archivo de entrada. Por lo tanto, tenga cuidado de escribir el patrón correctamente.


El error:

''/r'' : comando no encontrado

es causado por el shell que no puede reconocer los finales de línea CRLF similares a Windows ( 0d 0a ) ya que solo espera LF ( 0a ).

Git

Si usa Git en Windows, asegúrese de haber seleccionado ''Verificar como está '' durante la instalación. Luego, asegúrese de ejecutar: git config --global core.autocrlf false , para que Git no realice ninguna conversión al retirar o confirmar archivos de texto.

dos2unix

Si no está utilizando Git, simplemente necesita convertir estos archivos / scripts afectados de nuevo a finales de línea similares a Unix (LF), ya sea por:

dos2unix ~/.bashrc

Nota: El comando dos2unix es parte del paquete dos2unix .

Ex / Vim editor + tr

Si has instalado Vim, el siguiente comando debería corregir los archivos:

ex +''bufdo! %! tr -d //r'' -scxa ~/.bash*

Alias ​​útiles: alias dos2unix="ex +''bufdo! %! tr -d ////r'' -scxa" .

tr

Aquí está el método utilizando tr :

cat ~/.bashrc | tr -d ''/r'' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc

o:

tr -d ''/r'' < filename > new_filename

Nota: El /r es equivalente a /015 .

sed

Puedes probar el siguiente comando:

sed -i''.bak'' s//r//g ~/.bash*

recode

Los siguientes alias pueden ser útiles (que reemplaza el comando dos2unix ):

alias unix2dos=''recode lat1:ibmpc'' alias dos2unix=''recode ibmpc:lat1''

Fuente: Herramientas gratuitas de Unix (ssh, bash, etc.) en Windows .

perl

El siguiente comando de perl puede convertir el archivo de DOS a formato Unix:

perl -p -i.bak -e ''s//015//g'' ~/.bash*

Fuente: pelar el ^ M.

tofrodos

En Linux, como Ubuntu que no viene de serie con dos2unix o unix2dos , puede instalar el paquete tofrodos ( sudo apt-get install tofrodos ), y definir los siguientes alias:

alias dos2unix=’fromdos’ alias unix2dos=’todos’

A continuación, utilice en la misma sintaxis anterior.

Vagabundo

Si está utilizando Vagrant VM y esto sucede con el script de aprovisionamiento, intente configurar la opción binary en true :

# Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html config.vm.provision "shell" do |s| s.binary = true # Replace Windows line endings with Unix line endings. s.path = "script.sh" end

Consulte: Problemas de Windows CRLF a Unix LF en Vagrant .


El problema puede haber ocurrido debido al archivo / script creado / descargado desde una máquina con Windows. Por favor, intente convertir en formato de archivo de Linux.

dos2unix ./script_name.sh

o

dos2unix ~/.bashrc


En EditPlus , haga esto desde el menú Document → File Format (CR/LF) → Change File Format... y luego elija el botón de opción Unix / Mac OS X


Estoy usando cygwin y Windows7, el truco NO fue poner el set -o igncr en tu .bashrc, sino poner SHELLOPTS completos en tus variables de entorno bajo Windows. (Así que nada con unix / cygwin ...) Creo que no funciona desde .bashrc porque "las gotas ya están sucias", como diríamos en alemán. ;-) Así que mi SHELLOPTS ve así

braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor


Para usuarios de WINDOWS con Notepad ++ (marcado con v6.8.3) puede corregir el archivo específico usando la opción - Editar -> Conversión de EOL -> Formato Unix / OSX

Y guarde su archivo de nuevo.

Edición: todavía funciona en v7.5.1 (29 de agosto de 2017)


Puede ser que haya usado notepad ++ para crear / actualizar este archivo.

EOL (Editar-> Conversión EOL) La conversión por defecto es Windows.

Cambiar la conversión de EOL en Notepad ++

Edit -> EOL Conversion -> Unix (LF)


Resuelto con Notepad ++:

1) Menú-> Editar-> Conversión EOL -> Formato Unix / OSX

2) Luego guardar

Fijo


Según esta gist , la solución es crear un ~/.bash_profile (en el directorio HOME ) que contiene:

export SHELLOPTS set -o igncr


Si está utilizando un Cygwin reciente (por ejemplo, 1.7), también puede iniciar su .bashrc y .bash_profile con la siguiente línea, en la primera línea sin comentarios:

# ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples (set -o igncr) 2>/dev/null && set -o igncr; # this comment is needed

Esto obligará a bash a ignorar los caracteres de retorno de carro ( /r ) utilizados en los separadores de línea de Windows.

Consulte http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html .


Si tiene el paquete vim instalado en su instalación de Cygwin, puede usar vim para solucionar este problema sin buscar y reemplazar. Inicie vim de la siguiente manera: vim filename.sh (a menudo también tiene un alias de vi). Luego, escriba :set fileformat=unix , luego :wq (write & quit) para guardar sus cambios. (El : te pone en el modo de edición de vim.)

Recomiendo esto sobre dos2unix ya que vim es probablemente más comúnmente instalado.

Sin embargo, probablemente sea una buena práctica configurar el editor de texto para guardar los archivos que planea usar en un entorno Unix / Linux para tener un formato de texto Unix. Las respuestas dadas anteriormente para Notepad ++ son un buen ejemplo.

Nota adicional: Si no está seguro de qué tipo de archivo es (DOS o Unix), puede usar el file filename.sh . Esto puede ayudar especialmente a depurar problemas más oscuros (como los problemas de codificación al importar volcados de SQL que provienen de Windows).

Para ver otras opciones sobre cómo modificar el formato del archivo de texto, consulte este artículo de la base de conocimientos de IU

Más información de fondo sobre los scripts Bash y los finales de línea se encuentra en esta pregunta de .


También puede agregar la opción -o igncr a la llamada de bash, por ejemplo,

bash -x -o igncr script.sh


Yo tuve el mismo problema. Solución: edito el archivo con el editor pspad y le doy un formato UNIX (Menú - Formato -> UNIX)

Creo que puedes establecer este formato en tu archivo con muchos otros editores


gente que usa notepad ++ (6.8.1) para enviar scripts de shell desde Windows a Linux.

configure lo siguiente en notepad ++ Edit -> EOL Conversion -> formato Unix / OSX


intente ejecutar el siguiente comando

vim .bashrc :set ff=unix :wq!


Cuando todo lo demás falla en Cygwin ...

Intente ejecutar el comando dos2unix en el archivo en cuestión.

Podría ayudar cuando vea mensajes de error como este:

-bash: ''/r'': command not found

Los caracteres de nueva línea del estilo de Windows pueden causar problemas en Cygwin.

El comando dos2unix modifica los caracteres de nueva línea para que sean compatibles con Unix / Cygwin.

PRECAUCIÓN: el comando dos2unix modifica los archivos en su lugar , así que tome precauciones si es necesario.

Si necesita conservar el archivo original, primero debe realizar una copia de seguridad.

Nota para los usuarios de Mac: el comando dos2unix no existe en Mac OS X.

Echa un vistazo a esta respuesta para una variedad de soluciones utilizando diferentes herramientas.

También hay un comando unix2dos que hace lo contrario:

Modifica los caracteres de nueva línea de Unix para que sean compatibles con las herramientas de Windows.

Si abre un archivo con el Bloc de notas y todas las líneas se ejecutan juntas, intente con el unix2dos filename .


TEXTO SUBLIME

Con sublime solo tienes que ir a

Ver -> Finales de línea -> (seleccionar) Unix

Luego guarda el archivo. Arreglará este problema.

¡Tan fácil como eso!