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:
- Abre el archivo
- Mx set-buffer-file-coding-system
- 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
- Simplemente uso. Necesito configurar mi archivo
.editorconfig
1 vez, donde creo mi proyecto, → Puedo olvidar algunos problemas específicos de plataforma, estilo e IDE . - 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!