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 porsudoteecom--appendopçã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/environmentbut creating a file with the file name ending in.shin/etc/profile.d. The/etc/profilescript and all scripts in/etc/profile.dare the global equivalent of each user's personal~/.profileand 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$PATHvalue.
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.