-
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[etestcomo 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. Emborateste=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 useexecpara 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