sudo: source: comando não encontrado ao executar tcl como sudo

0

Eu tenho um test.tcl (tem todas as permissões) que contém o seguinte -

#!/usr/bin/tclsh    
puts "hello, world"

É assim que estou executando meu script tcl -

sudo source /opt/test.tcl

Eu tenho a saída -

sudo: source: command not found

Mas verifiquei a disponibilidade de source e sudo usando o comando whereis e eles estavam disponíveis -

$ whereis sudo
sudo: /usr/bin/sudo /usr/share/man/man8/sudo.8.gz
$ whereis source
source: /usr/share/man/man1/source.1.gz

No entanto, quando tento executar tcl as-

sudo tclsh /opt/test.tcl

Eu recebo a saída esperada -

hello, world

Estou faltando alguma coisa aqui?

    
por AlwaysALearner 23.08.2013 / 10:44

1 resposta

1

source é um shell embutido. Seu shell não pode encontrar source pelo mesmo motivo que não pode encontrar cd quando você está usando o sudo - não é um comando. Você pode usar o shell embutido type para verificar isso sozinho.

source executa o conteúdo de um arquivo que você especifica no seu shell atual . Isso deve ser bom, desde que você não precise de um shell interativo e que seu shell atual seja tclsh. Leia aqui para obter mais informações.

sudo tclsh /opt/test.tcl

funcionará, mas será executado em um shell não interativo.

Se você precisar source do script por algum motivo, decida se precisa fazer permissões especiais ou não. Se você precisar, você pode su para root e source o script de lá.

Além disso, a saída que você obteve para $ whereis source

source: /usr/share/man/man1/source.1.gz

parece ser uma página man . Então, isso provavelmente não seria muito útil!

    
por 23.08.2013 / 11:18