-
Você precisa de espaço após
if [
porque[
é realmente um comando (comotest
) que lê seus argumentos (pode ser interpretado pelo shell, mas pode não ser). Usar[[
garante que a lógica interna do shell seja usada (mais rápido, já que nenhum novo processo é iniciado). Embora os shells possam interpretar os[
etest
como internos, esse recurso pode ser desativado comenable
(e, em seguida, um novo processo realmente é iniciado). -
=
é o operador de comparação dentro de expressões condicionais (externas e internas), mas também é o operador de atribuição em outro lugar. Emboratest
e=
estejam em conformidade com POSIX, usar==
(reconhecido em[[
) parece ser uma escolha razoável sempre que não se deseja conformidade com POSIX, pois traz um pouco mais de sanidade à inconsistência do shell do significado dependente do contexto de=
. -
exit 1
- por que descartar efetivamente o valor de retorno do editor? Deixe-o fora completamente ou useexec
para substituir o script pelo editor.
#!/bin/bash
editor=$1
if [[ "$1" == "g" ]]; then
exec geany "$file.tex"
else
linha=$(wc -l < "$file.tex")
exec texstudio --line $linha "$file.tex"
fi