Usé Cygwin en mi computadora portátil (DOS). Tengo una colección de guiones de mis colegas y la mía. No soy una persona de TI, no estoy bien informado en Unix. Sigo la sintaxis de mis colegas y puedo administrar algunas cosas simples.
Los guiones funcionaron bien en mi vieja computadora portátil. Acabo de cambiar la computadora portátil, instalé Cygwin. Cuando ejecuto mis scripts, no funcionan. Aquí hay un ejemplo del mensaje de error que recibo:
line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi
Aquí están las 5 primeras líneas de mi script
:
iter=1
if [ -f iter.txt ]
then rm ./iter.txt
fi
¿Puede alguien explicarme cómo puedo solucionar este problema?
fuente
vim
puede hacer esto de dos maneras, una de las cuales usa palabras. O, mejor aún, señalar dónde se ha respondido esta tarea subordinada una y otra vez con mucho más detalle que cualquier respuesta en esta página, incluido unix.stackexchange.com/questions/88811 solo para empezar.vi -b
, de\r
todos modos , son extensiones vim. no POSIX, no en nvi, elvis, Solaris vi ...Esto se debe a que el guión ha sido guardado por un editor que utiliza finales de línea de DOS (como Notepad ++, por ejemplo). Deberá eliminarlos de sus scripts.
Para hacer esto, use
dos2unix
en el archivo de script o(esto eliminará todos los retornos de carro de cualquier parte del script)
En cuanto al código en el script:
Esto posiblemente debería parecerse a algo como
Esto elimina el archivo
1.txt
del directorio actual, si existe. El:
comando no hace nada (casi) y puede eliminarse. Eliter
valor de la variable debe usarse como$iter
, y ser citado. Y luego posiblemente estoy siendo más explícito de lo que necesito./
al decir que el archivo debe encontrarse en el directorio actual.Si usted está planeando convertir esto en un bucle (en este caso, la supresión de todos los archivos
1.txt
,2.txt
, ...,10.txt
):O, si nos sentimos furtivos / flojos,
en conchas que entienden la expansión de los aparatos.
fuente
Windows (CR LF)
y cambiarlo aUnix (LF)
rm -f [1-9].txt 10.txt
. Pero eso no es totalmente equivalente lógicamente, como si no hay archivos de 1-9, pero no es un archivo llamado literalmente[1-9].txt
a continuación, se eliminará. : DSus guiones tienen los finales de línea incorrectos. Windows usa CR + LF (\ r \ n), Unix usa LF (\ n) y Classic MacOS usa CR (\ r). Tendrá que cambiar los finales de línea en todos los archivos afectados, ya sea con un editor de texto o una herramienta independiente como
dos2unix
.Los sistemas de control de versiones y FTP como SVN tienden a ser capaces de convertir las terminaciones de línea de manera apropiada, por lo que es posible que desee examinar esas opciones para transferir archivos en el futuro.
Si estos archivos no se transfieren, sino que solo se usan en una sola máquina, entonces querrá encontrar la configuración para los finales de línea en su editor de texto preferido. La mayoría de los anunciados como "para programadores" tendrán esa opción.
fuente
Como respuesta complementaria, permítanme agregar un par de notas / consejos ...
Primero, para los archivos de texto normales, puede determinar fácilmente si tienen un final de línea Unix o DOS utilizando el
file
comando. Por ejemplo:Tenga en cuenta mi uso de
dos2unix
. Le recomiendo que lo instale. Dependiendo de cómo use Cygwin, es posible que necesite hacer esta conversión con la frecuencia suficiente para que la conveniencia sea bienvenida. Más importante aún, no hay posibilidad de error como el que obtiene con las ediciones manuales discutidas aquí.Para instalar, inicie el ejecutable principal de Cygwin. Ese es el que tiene el nombre como setup-x86_64.exe o algo por el estilo. Asegúrese de ver una pantalla como esta:
Como ya ha realizado la instalación principal, debería poder hacer clic en Siguiente hasta que aparezca la pantalla de selección. Seleccione Completo en el menú desplegable e ingrese "dos2" en el cuadro de búsqueda y elija la herramienta como se muestra aquí:
Luego haga clic en Siguiente nuevamente y deje que se complete la instalación. Eso es. Que te diviertas. Cygwin, con la excepción de este inconveniente ocasional, es un paquete increíble.
fuente
Si no es dos2unix, también hay 'flip'
$ flip -u yourfilename.txt
lo cambiará a usar terminaciones de línea unix.
fuente
Utilizo Notepad ++ para editar mis scripts bash (.sh) conectándome al servidor mediante WinSCP
(para configurar el editor WinSCP en Notepad ++: https://winscp.net/eng/docs/ui_editor_preferences )
Esto es muy práctico para abrir archivos de servidores para editar / guardar en lugar del editor " Vim ".
Cuando abra el archivo en Notepad ++ , haga doble clic en la séptima columna en la barra de estado en la parte inferior y seleccione " Unix (LF) ".
Además, debe cambiar el octavo codificando -> Codificar en UTF-8 en la barra superior.
fuente
No necesita cambiar la codificación de línea del archivo real para que Cygwin's Bash funcione felizmente con las codificaciones de fin de línea de Mac y Windows. Hay una opción que solo necesitas activar.
Simplemente actualice su
~/.bash_profile
para que contengaVer https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html
fuente