Solaris: um script simples não funciona, o comando único não

0

No meu Solaris Illumos, eu corro um script simples:

 update_drv -a -i '[myhardware]' [driver]
 svcadm disable stmf
 svccfg import /mypath/myconfig
 svcadm enable stmf

Não funciona e não me dá nenhum erro. O serviço stmf entra em modo de manutenção e eu preciso reiniciar!

Descobri que, se eu executar os comandos únicos do console, ele funciona, mas se eu colocá-lo em um script, ele funcionará somente na primeira linha.

Você pode explicar esse comportamento?

    
por CSG 27.05.2014 / 16:45

1 resposta

1

Se a primeira linha é exatamente como você mostrou aqui e você está executando a linha do console em um diretório diferente do que você está executando o script a partir de então a explicação mais provável é que existe um arquivo em o diretório de script que tem um nome de arquivo de um caractere, que é um dos caracteres em "driver".

O shell vê [driver] como um potencial glob e tenta associá-lo a nomes de arquivos no diretório. Se encontrar um que corresponda, substitui o nome pelo glob. Por exemplo, o comando resultante que é executado pode parecer com:

update_drv -a -i '[myhardware]' d

que podem ter efeitos indesejados.

Para evitar isso, coloque aspas ao redor do último argumento como você tem ao redor do anterior.

No entanto , suspeito que suas strings entre colchetes sejam meros espaços reservados e você tenha omitido informações que podem ser úteis na tentativa de encontrar possíveis soluções. A propósito, a documentação do Oracle parece indicar que uma reinicialização provavelmente é necessária de qualquer maneira.

Para solucionar problemas do seu script, adicione set -x próximo ao topo para poder ver um rastreamento. Você também pode adicionar uma linha como echo "here" após a primeira (ou qualquer) linha para ver se o seu script chega tão longe. É muito estranho que você não esteja recebendo mensagens de erro.

Outra possibilidade é um hardware binário ou ruim corrompido, mas isso parece improvável, já que funciona na linha de comando.

Outra consideração, possivelmente primária, é que o ambiente difere entre sua sessão de console e o script. Você não diz se está executando seu script a partir da linha de comando ou por cron . Geralmente, é nessas circunstâncias que o PATH é diferente ou alguma variável de ambiente é definida de forma diferente ou não definida. Uma maneira de diagnosticar isso é adicionar um comando como set > script_env.out em seu script e fazer set > cons_env.out na linha de comando e diff os dois arquivos e procurar diferenças significativas. Você está executando o script e o comando do console como usuários diferentes? Isso tem um efeito também.

    
por 28.05.2014 / 03:59