J'ai essayé différentes formes de ce qui suit dans un script bash:
#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Mais je ne peux pas obtenir la syntaxe pour développer correctement la COLUMNS
variable d'environnement.
J'ai essayé différentes formes de ce qui suit:
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
et
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
et
eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Suggestions?
bash
quotes
environment
Jamie
la source
la source
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W ""$COLUMNS"
$@
guillemet le rend exactement identique à$*
- c'est-à-dire qu'il se décompose"foo bar"
en deux arguments distincts,foo
etbar
. Si vous souhaitez conserver la liste d'arguments d'origine telle qu'elle vous a été fournie, vous le souhaitez"$@"
.Réponses:
En cas de doute, vous pouvez utiliser la requête 'cols' sur le terminal et oublier COLUMNS:
la source
Juste une petite note / résumé pour tous ceux qui sont venus ici via Google à la recherche de la réponse à la question générale posée dans le titre (comme je l'étais). L'un des éléments suivants devrait fonctionner pour accéder aux variables shell entre guillemets:
L'utilisation de guillemets simples est le principal problème. Selon le manuel de référence Bash :
Dans le cas spécifique posé dans la question, $ COLUMNS est une variable spéciale qui a des propriétés non standard (voir la réponse de lhunath ci-dessus).
la source
'before'"$variable"'after'
(comme indiqué dans cette réponse: stackoverflow.com/a/13802438/2254346 )Notez que
COLUMNS
c'est:SIGWINCH
signal.Ce deuxième point signifie généralement que votre
COLUMNS
variable ne sera définie que dans votre shell interactif , pas dans un script bash.Si votre script
stdin
est connecté à votre terminal, vous pouvez rechercher manuellement la largeur de votre terminal en demandant à votre terminal:Et pour l'utiliser dans votre commande SVN:
(Remarque: vous devez citer
"$@"
et rester à l'écarteval
;-))la source
Le script suivant fonctionne pour moi pour plusieurs valeurs de
$COLUMNS
. Je me demande si vous ne réglez pasCOLUMNS
avant cet appel?Pouvez-vous faire écho à l'
$COLUMNS
intérieur de votre script pour voir s'il est défini correctement?la source
$@
- qui divise un seul paramètre"two words"
en deux paramètres distincts,two
etwords
."$@"
Cela devrait être de passer la liste d'arguments exactement telle qu'elle a été donnée.Vous le faites correctement, donc je suppose que quelque chose d'autre est en faute (pas d'exporter des COLONNES?).
Une astuce pour déboguer ces cas est de faire une commande spécialisée (une fermeture pour les gars du langage de programmation). Créez un script shell nommé diff-columns en faisant:
et juste utiliser
De cette façon, votre code est plus propre à lire et plus modulaire (approche descendante), et vous pouvez tester le code des colonnes différentiellement séparément (approche ascendante).
la source