Por que o mesmo .sh não funciona com dois usuários diferentes que o executam?

0

Eu tenho dois usuários, User1 e User2.

Eu tenho este script1.sh dentro da pasta base do User2:

#!/bin/bash

cd /home/user1 && ./script2.sh

que chama script2.sh:

#!/bin/bash

if [ 2 > 1 ]; then
echo TRUE!.
else
echo NOT TRUE!
fi

Agora, quando executo o script1 usando o user1, tudo funciona. Quando eu executo com user2 eu recebo este erro:

./script2.sh: line 3: 1: Permission denied

Dizendo que não posso .. SE? Se eu escrevo tudo no terminal, também funciona. Então minhas permissões:

-rwxrwxr-x 1 user2 group_with_both_users 149 Ago 19 02:41 script2.sh
-rwxr-xr-x 1 user2 group_with_both_users 60 Ago 19 01:38 script1.sh

Eu realmente não tenho ideia do que está acontecendo.

    
por apt 19.08.2014 / 07:53

2 respostas

5

A linha

if [ 2 > 1 ]; then

faz com que o shell tente abrir um arquivo chamado 1 para gravação. Leia a seção REDIRECTION na página do manual do bash para obter uma explicação. Seu user1 aparentemente tem permissão para gravar nesse arquivo e user2 não é.

Você provavelmente estava pensando nisso:

if [ 2 -gt 1 ]; then

Que testa se 2 é maior que 1, o que obviamente é verdade, exceto para valores muito grandes de 1.

    
por zwets 19.08.2014 / 07:59
0

As seguintes expressões são usadas com números inteiros:
Tabela 27-3 (de tlcl's livro em pdf ):

Integer Expressions:

Expression             Is True If...
integer1 -eq integer2 integer1 is equal to integer2.
integer1 -ne integer2 integer1 is not equal to integer2.
integer1 -le integer2 integer1 is less than or equal to integer2.
integer1 -lt integer2 integer1 is less than integer2.
integer1 -ge integer2 integer1 is greater than or equal to integer2.
integer1 -gt integer2 integer1 is greater than integer2.

Então, você precisa usar -gt em vez de > em se expressão .

    
por Pandya 19.08.2014 / 08:14