Seu comando não funciona porque o redirecionamento da saída ( >
/ >>
) não é executado pelo sudo. Existem várias maneiras de resolver isso. Por exemplo:
-
Você pode usar canal (
|
) e executar porsudo
tee
com--append
opção:echo /home/mpiuser/mpich1/bin | sudo tee -a /etc/environment
-
Outra abordagem é executar o comando inteiro como
sudo
:sudo bash -c 'echo /home/mpiuser/mpich1/bin >> /etc/environment'
Em resultado, o conteúdo de /etc/environment
será parecido com:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
/home/mpiuser/mpich1/bin
Referências:
- Não é possível echo "olá" > x.txt mesmo com sudo?
- Ao usar o sudo com redirecionamento, recebo 'permissão negada '
- Como faço para usar o sudo para redirecionar a saída para um local que não tenho permissão para gravar?
EDIT 1:
No entanto, acho que esta nova linha em /etc/environment
não fará nada por si só. Para ter algum significado, este "caminho" deve ser anexado ao valor de $PATH
envvar.
Documentação do Ubuntu diz que :
Variable expansion does not work in
/etc/environment
.
Então, para acrescentar /home/mpiuser/mpich1/bin
ao valor de $PATH
, via comando único, você pode usar este:
cat /etc/environment | sed 's/\"$/:\/home\/mpiuser\/mpich1\/bin\"/' | sudo tee /etc/environment
Onde: (1) cat /etc/environment
imprimirá o conteúdo do arquivo; (2) sed '...'
substituirá a última marca de aspas ( "
) por :/home/mpiuser/mpich1/bin"
; (3) sudo tee /etc/environment
irá reescrever o arquivo.
Em resultado, o conteúdo de /etc/environment
será parecido com:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/mpiuser/mpich1/bin"
Por favor, vá até o final.
Referências:
EDIT 2:
Eu fiz uma pequena pesquisa e encontrei alguns conselhos como isso :
However, if you need to set that environment variable for all users, I would still not recommend touching
/etc/environment
but creating a file with the file name ending in.sh
in/etc/profile.d
. The/etc/profile
script and all scripts in/etc/profile.d
are the global equivalent of each user's personal~/.profile
and executed as regular shell scripts by all shells during their initialization.
E isso :
Please avoid modifing system files. Instead you should place an executable script in
/etc/profile.d
(scripts in here got executed for every user) to change$PATH
value.
De acordo com esses avisos, vamos supor que você queira criar um arquivo chamado mpich-path.sh
, que é colocado no diretório /etc/profile.d/
. Isso pode ser feito pelo comando:
echo 'export PATH="$PATH:/home/mpiuser/mpich1/bin"' | sudo tee /etc/profile.d/mpich-path.sh
Em resultado, o conteúdo do novo arquivo /etc/profile.d/mpich-path.sh
será assim:
export PATH="$PATH:/home/mpiuser/mpich1/bin"
Efetue logout e login novamente no sistema e digite echo $PATH
para verificar o resultado.
EDIT 3:
Eu não sei sobre as outras etapas do manual que você segue, mas além da etapa 11, a etapa 10 também não parece completamente clara.
Esta parte:
export PATH=/home/mpiuser/mpich1/bin:$PATH # assigns a new value and exports the variable
export PATH # exports the variable
deve ser:
PATH=/home/mpiuser/mpich1/bin:$PATH # assigns a new value
export PATH # exports the variable
ou apenas:
export PATH=/home/mpiuser/mpich1/bin:$PATH # assigns a new value and exports the variable
E ele produzirá o mesmo resultado do passo 11. Portanto, essa parte é desnecessária.
A novidade aqui é essa parte:
LD_LIBRARY_PATH="/home/mpiuser/mpich1/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
Mas, talvez, ele possa ser incluído no arquivo - /etc/profile.d/mpich-path.sh
- que criamos acima.