Eu faço o script bash temp.sh com o seguinte conteúdo:
age=0;
((age++));
Quando eu executo como um usuário normal, ele funciona bem.
Mas quando executo como root, recebo erro:
./temp.sh: 4: ./temp.sh: idade++: não encontrado
Por que é que?
Eu faço o script bash temp.sh com o seguinte conteúdo:
age=0;
((age++));
Quando eu executo como um usuário normal, ele funciona bem.
Mas quando executo como root, recebo erro:
./temp.sh: 4: ./temp.sh: idade++: não encontrado
Por que é que?
Na ausência de um hashbang,
/bin/sh
provavelmente está sendo usado. Alguns shells POSIX suportam os operadores and e++
para avaliações aritméticas, mas não são obrigatórios.--
((...))
Como você não incluiu um hashbang em seu exemplo, assumirei que você não está usando um e, portanto, seu script provavelmente está sendo executado em um shell POSIX que não suporta o referido operador. Tal shell interpretaria
((age++))
como oage++
comando sendo executado dentro de dois subshells aninhados.Quando você o executa como um usuário "normal", provavelmente está sendo interpretado pelo bash ou outro shell que suporta o referido operador e
((...))
.Relacionado: Qual interpretador de shell executa um script sem shebang?
Para corrigir isso, você pode adicionar um hashbang ao seu script:
Nota: Você não precisa terminar linhas com
;
bash/shell.Para tornar seu script portátil para todos os shells POSIX, você pode usar a seguinte sintaxe:
Outra resposta antiga (ou compatível com várias plataformas) é: