Probé varias formas de lo siguiente en un script bash:
#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Pero no puedo hacer que la sintaxis expanda correctamente la COLUMNS
variable de entorno.
Probé varias formas de lo siguiente:
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
y
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
y
eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Sugerencias
bash
quotes
environment
Jamie
fuente
fuente
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W ""$COLUMNS"
$@
comillas lo hace exactamente igual que$*
, lo que quiere decir que se divide"foo bar"
en dos argumentos separados,foo
ybar
. Si desea conservar la lista de argumentos original tal como se le proporcionó, lo desea"$@"
.Respuestas:
Si no está seguro, puede usar la solicitud 'cols' en la terminal y olvidar COLUMNAS:
fuente
Solo una nota / resumen rápido para cualquiera que haya venido aquí a través de Google en busca de la respuesta a la pregunta general formulada en el título (como yo). Cualquiera de los siguientes debería funcionar para obtener acceso a las variables de shell entre comillas:
El uso de comillas simples es el problema principal. Según el Manual de referencia de Bash :
En el caso específico planteado en la pregunta, $ COLUMNS es una variable especial que tiene propiedades no estándar (consulte la respuesta de lhunath arriba).
fuente
'before'"$variable"'after'
(como se indica en esta respuesta: stackoverflow.com/a/13802438/2254346 )Tenga en cuenta que
COLUMNS
es:SIGWINCH
señal.Ese segundo punto generalmente significa que su
COLUMNS
variable solo se establecerá en su shell interactivo , no en un script bash.Si su script
stdin
está conectado a su terminal, puede buscar manualmente el ancho de su terminal preguntando a su terminal:Y para usar esto en su comando SVN:
(Nota: debe cotizar
"$@"
y mantenerse alejado deeval
;-))fuente
El siguiente script me funciona para múltiples valores de
$COLUMNS
. Me pregunto si no está configurandoCOLUMNS
antes de esta llamada.¿Puedes hacer eco
$COLUMNS
dentro de tu secuencia de comandos para ver si está configurado correctamente?fuente
$@
- que divide un solo parámetro"two words"
en dos parámetros separados,two
ywords
. Debería"$@"
pasar la lista de argumentos exactamente como se le dio.Lo está haciendo bien, así que supongo que algo más tiene la culpa (¿no exportar COLUMNAS?).
Un truco para depurar estos casos es hacer un comando especializado (un cierre para los chicos del lenguaje de programación). Cree un script de shell llamado diff-columnas haciendo:
y solo usa
De esta manera, su código es más limpio de leer y más modular (enfoque de arriba hacia abajo), y puede probar el código de columnas de diferencias completamente por separado (enfoque de abajo hacia arriba).
fuente