Quando você corre
sudo su
./temp.csh
isto executa um shell interativo como root ( sudo su
), então quando esse shell termina o script csh é executado. Da mesma forma, o script temp.csh
primeiro executa um tcsh interativo e, em seguida, altera seu diretório atual antes de sair.
Para executar um script csh como root, execute
sudo ./temp.csh
Para executar uma instância interativa do tcsh como root, o que eu acho que é o que você está tentando fazer, execute
sudo tcsh
Para executar essa instância do tcsh em um diretório específico, altere o diretório antes de executar o sudo.
cd /path/to/directory && sudo tcsh
Observe que, em muitas instalações, sudo
limpa a maior parte do ambiente, portanto, não espere que as variáveis de ambiente definidas no script do wrapper estejam disponíveis na sessão tcsh.
Você não pode passar um script para executar no início de uma sessão tcsh, além dos arquivos de perfil ( /etc/csh.login
e ~/.login
para os shells de login, /etc/csh.cshrc
e ~/.cshrc
para todas as instâncias de tcsh). Se você quiser executar alguns comandos iniciais, coloque-os em ~/.cshrc
(possivelmente dentro de uma construção condicional). Como alternativa, para comandos que executam apenas programas, defina variáveis de ambiente, altere o diretório atual e semelhantes, é possível usar um script de wrapper como o abaixo; isso não funciona para alterar o ambiente shell (por exemplo, para definir variáveis csh com set
).
#!/bin/tcsh
# commands go here
cd $workdir
setenv foo bar
exec tcsh