As variáveis de ambiente são sempre herdadas do processo pai [†], portanto, o .cshrc
precisará definir ou remover manualmente quaisquer variáveis de ambiente indesejadas
setenv PATH /bin:/other/dirs/here:/and/more
unsetenv PS1
Note que estas são operações exclusivas (para as quais o inglês "ou" infelizmente não possui especificidade booleana). setenv PATH
define a variável de ambiente PATH
e, em vez disso, unsetenv PS1
remove o ambiente PS1
indesejado. Fazer unsetenv PATH
e, em seguida, setenv PATH ...
apenas desperdiçariam ciclos da CPU. Em vez disso, simplesmente defina PATH
para o que você deseja que seja. (Editar PATH
é uma tarefa muito mais complicada e exigirá divisão em :
e, em seguida, aplicar código para cada elemento de diretório e assim por diante ... por que todo esse problema? Defina PATH
para o que ele precisa ser.)
Ou pode-se usar env -i csh
para eliminar totalmente o ambiente, caso em que .cshrc
deve definir melhor tudo que é necessário (várias variáveis de ambiente essenciais são definidas por login(1)
ou equivalentes, como HOME
e assim por diante):
$ env perl -E 'say $ENV{SHELL}'
/opt/local/bin/mksh
$ env -i perl -E 'say $ENV{SHELL}'
$
[†] Bourne shells complicam isso colocando variáveis somente shell como PS1
no mesmo namespace que o resto e então tendo um booleano (via export
) que sinaliza aquelas que são repassadas via extern char **environ
aos processos filhos; veja as páginas environ(7)
e execve(2)
man para mais detalhes sobre o que está acontecendo sem a complicação do shell.