Ksh script warnings [closed]

0

Durante a execução do meu script, recebi a seguinte mensagem (não é um erro, falando estritamente, porque a execução prossegue depois):

myScript -s test -u test2
pk_copylogs[2]: hist: :: not found

No entanto, você sabe por que esta mensagem aparece?

    
por user1058398 18.11.2013 / 15:57

3 respostas

2

O comando hist é um shell korn (ksh93) embutido e não está disponível no bash.

Seu (s) script (s) parece estar rodando sob o bash, não o ksh.

ksh$ command -V hist
hist is a shell builtin   

bash$ command -V hist
bash: command: hist: not found

Tente o seguinte:

$ ksh myScript -s test -u test2

ou:

$ SHELL=ksh ksh myScript -s test -u test2

No entanto, hist é um comando que normalmente é usado apenas no modo interativo. e eu não esperaria isso em um script. É raramente invocado diretamente e mais frequentemente como um dos seguintes aliases:

$ alias | grep hist
fc=hist
history='hist -l'
r='hist -s'        

Procure por fc , history , r .

    
por 19.11.2013 / 00:09
0

No seu código myScript , há uma chamada para outro script externo chamado pk_copylogs . Na segunda linha do pk_copylogs, há uma suposição de que você tem um comando chamado hist acessível de qualquer lugar, ou seja, em um dos diretórios incluídos na variável $PATH .

A causa mais provável desse problema é que, na maioria dos shells com os quais trabalhei, não precisei configurar meus atalhos, mas alguém antes de mim fez isso, o comando hist foi aliado para o comando history para os propósitos de conveniência. Mas quando você inicia um script de shell, esse alias sai pela janela. É claro que seu caso pode ser totalmente diferente, mas sem ver o código real desses dois scripts que você referenciou, ou seja, myScript e pk_copylogs, é muito difícil fazer quaisquer asserções

    
por 18.11.2013 / 20:51
0

Dê uma olhada na segunda linha do script fc_copylogs , essa é a que aciona a mensagem de erro.

Aqui está uma maneira de reproduzir exatamente a mesma mensagem que você recebeu:

$ cd /tmp
$ cat > pk_copylogs <<%
#!/bin/ksh
fc $1
%
$ chmod +x /tmp/pk_copylogs
$ PATH=$PATH:/tmp pk_copylogs ::
pk_copylogs[2]: hist: :: not found

Claro, pode não ser exatamente a mesma situação no seu caso, mas certamente é muito próxima.

A segunda linha de pk_copylogs pode simplesmente conter essa linha

hist ::

que produziria a mesma mensagem de erro ou qualquer coisa que se expandisse para ela.

Se você não sabe onde procurar, pode executar este comando para localizar o script com falha:

find / -name pk_copylogs -print 

e, em seguida, dê uma olhada nas primeiras linhas com

head /path/to/pk_copylogs
    
por 18.11.2013 / 20:00

Tags