Tentei várias formas do seguinte em um script bash:
#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Mas não consigo obter a sintaxe para expandir corretamente a COLUMNS
variável de ambiente.
Tentei várias formas do seguinte:
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
e
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
e
eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Sugestões?
bash
quotes
environment
Jamie
fonte
fonte
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W ""$COLUMNS"
$@
aspas torna-o exatamente o mesmo que$*
- o que significa que se divide"foo bar"
em dois argumentos separados,foo
ebar
. Se você deseja preservar a lista de argumentos original exatamente como foi fornecida a você, você deseja"$@"
.Respostas:
Se não tiver certeza, você pode usar a solicitação 'cols' no terminal e esquecer COLUMNS:
fonte
Apenas uma nota / resumo rápido para quem veio aqui através do Google em busca da resposta à pergunta geral feita no título (como eu estava). Qualquer um dos itens a seguir deve funcionar para obter acesso às variáveis do shell entre aspas:
O uso de aspas simples é o principal problema. De acordo com o Manual de Referência Bash :
No caso específico da pergunta, $ COLUMNS é uma variável especial que possui propriedades não padronizadas (veja a resposta de lhunath acima).
fonte
'before'"$variable"'after'
(conforme declarado nesta resposta: stackoverflow.com/a/13802438/2254346 )Observe que
COLUMNS
é:SIGWINCH
sinal.Esse segundo ponto geralmente significa que sua
COLUMNS
variável só será definida em seu shell interativo , não em um script bash.Se o seu script
stdin
está conectado ao seu terminal, você pode procurar manualmente a largura do seu terminal perguntando ao seu terminal:E para usar isso em seu comando SVN:
(Nota: você deve citar
"$@"
e ficar longe deeval
;-))fonte
O seguinte script funciona para mim para vários valores de
$COLUMNS
. Gostaria de saber se você não está definindoCOLUMNS
antes desta chamada?Você pode ecoar
$COLUMNS
dentro do seu script para ver se ele está configurado corretamente?fonte
$@
- que divide um único parâmetro"two words"
em dois parâmetros separados,two
ewords
. Deve ser"$@"
para passar a lista de argumentos exatamente como foi fornecida.Você está fazendo certo, então acho que algo mais está errado (não exportar COLUNAS?).
Um truque para depurar esses casos é fazer um comando especializado (um encerramento para caras da linguagem de programação). Crie um script de shell chamado diff-colunas fazendo:
e apenas use
Desta forma, seu código é mais limpo para ler e mais modular (abordagem de cima para baixo), e você pode testar o código das colunas diff completamente separadamente (abordagem de baixo para cima).
fonte