Corrigindo configuração de caminho no arquivo ~ / .profile

10

Existe uma linha em ~/.profile , que é

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

Não tenho certeza sobre o último i .

  • Devo removê-lo ??
  • Não é um erro de sintaxe?
por Smile 07.12.2017 / 10:26

3 respostas

12

Não, não é um erro de sintaxe; é apenas uma letra que é anexada após a expansão de $PATH , porque o shell remove aspas ...

$ PATH="$HOME/bin:$HOME/.local/bin:$PATH"i
$ echo $PATH
/home/zanna/bin:/home/zanna/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bini

Assim, além de prefixar os diretórios locais, ele efetivamente removeu o /snap/bin existente do meu PATH e adicionou o não existente /snap/bini .

Você pode remover o i para reparar seu PATH.

Para ver a alteração, você precisará efetuar logout e voltar ou executar source ~/.profile em qualquer shell que estiver usando (ou iniciar o shell com bash -l ), porque .profile é lido por login shells apenas.

Se você não fez essa alteração no seu .profile , talvez queira restaurar o arquivo padrão executando

mv ~/.profile{,.old}
cp /etc/skel/.profile ~/.profile

Isso renomeia o antigo .profile .profile.old (você também pode excluir o arquivo se quiser) e o substitui pela versão padrão do seu sistema de /etc/skel .

    
por Zanna 07.12.2017 / 10:39
4

Sim, é um erro de sintaxe, o atual .profile deve ser assim, a menos que você altere as coisas (esta é a versão 17.10, veja as notas abaixo):

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Isso pode parecer diferente em versões mais antigas do Ubuntu, em que a verificação se o diretório bin dos usuários está presente não foi incluída no .profile . A maneira mais fácil de verificar como deve ser a aparência é olhar para /etc/skel/.profile .

Então, para adicionar o que você pediu no seu comentário, basta colocar isso no final do seu arquivo de perfil:

# Manual addition for swift development snapshot
export PATH="$PATH:/home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin"

Se você alguma vez atrapalhar seu perfil completamente, há uma cópia em que você pode obter um novo em /etc/skel/ .

    
por Videonauth 07.12.2017 / 10:29
3

Acho que não está claro o que a expressão a seguir significa:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"i

A primeira parte PATH= significa que atribuímos um novo valor à variável (ambiente) $PATH .

A segunda parte é o novo valor dessa variável. No caso atual, a variável $HOME será expandida com seu valor atual e a esse valor será anexada a string /bin: . O mesmo vale para a próxima parte da string $HOME/.local/bin: . Finalmente, o valor atual (anterior) da variável $PATH será expandido e anexado. O cólon : desempenha um papel de delimitador na expressão PATH .

O objetivo é finalmente escrever: PATH=<some additional paths>+<the the current value of $PATH> . Colocamos esses caminhos adicionais na frente da string, porque queremos que o shell pesquise executáveis primeiro nesses locais e somente depois do sistema.

O caractere i é desnecessário. Ele será acrescentado ao novo valor de $PATH e fará uma bagunça, como a @Zanna explica em sua resposta .

    
por pa4080 07.12.2017 / 11:02