〜/ .profileファイルのパス設定を修正する


11

ある行が~/.profileあります

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

最後はわからないi

  • 削除しますか?
  • 構文エラーではないですか?


4
@dessert重複しているかわかりません。私は両方とも$PATH環境変数について同意しますが、それらはまったく重複していません。最大で、それらは関連しています。この質問は~/.profile$PATH環境が割り当てられている行でたまたま余分な文字である問題です。
Dan

@Dan重複する質問の中で最も高い投票数(!)の回答は、PATH=~/.profileが有効であるように見える方法を説明しています。これが本当の質問です。
デザート

1
OPがここに持っている@dessertは完全に有効です。これは無効な形式の問題ではありません。これは機能しますが、何も役に立たないだけです。
terdon 2017

2
はい、viエディターを使用しています。おそらく、デザートが言ったように、誤って「i」をファイルに入れました。しかし、それを有効にするために:wqを実行する必要がありました。私はそれをしなかったと思いますが、私のレベルを考えると、私はいくつかの愚かなことをしたかもしれません。
2017

回答:


13

いいえ、それは構文エラーではありません。$PATHシェルは引用符を削除するので、それはの展開の後に追加される単なる文字です...

$ 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

そのため、ローカルディレクトリの先頭に/snap/bin加えて、既存のPATHを事実上PATHから削除し、存在しないを追加しました/snap/bini

を削除しiてPATHを修復できます。

変更を確認するには、ログインシェルでのみ読み取られるため、ログアウトして再度ログインするかsource ~/.profile、使用しているシェルで実行する(またはでシェルを起動するbash -l)必要.profileがあります。

この変更を.profile自分で行わなかった場合は、次のコマンドを実行してデフォルトファイルを復元することができます。

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

これにより、古い名前が変更され.profile .profile.old(必要に応じてファイルを削除することもできます)、システムのデフォルトバージョンに置き換えられます/etc/skel


5

ここでは、次の表現が何を意味するのか不明確だと思います。

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

最初の部分PATH=は、(環境)変数に新しい値を割り当てることを意味します$PATH

2番目の部分は、その変数の新しい値です。現在の場合、変数$HOMEは現在の値で展開され、その値に文字列が追加されます/bin:。文字列の次の部分についても同様$HOME/.local/bin:です。最後に、$PATH変数の現在の(以前の)値が展開されて追加されます。コロン:は、PATH式の区切り文字の役割を果たします。

最終的には、次のように記述しますPATH=<some additional paths>+<the the current value of $PATH>。シェルが最初にこれらの場所で実行可能ファイルを検索し、次にシステム全体で検索するため、これらの追加のパスを文字列の前に配置します。

キャラクターiは不要です。$PATH@Zannaが彼女の回答で説明するように、それはの新しい値に追加され、混乱します


5

はい、それは構文エラー.profileです。変更しない限り、実際は次のようになります(これは17.10バージョンです。その下の注を参照してください)。

# ~/.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

これは、ユーザーbinディレクトリが存在するかどうかのチェックがに含まれていなかった古いバージョンのUbuntuでは異なる場合があります.profile。それがどのように見えるべきかを確認する最も簡単な方法は、を見てみること/etc/skel/.profileです。

したがって、コメントで要求したとおりに追加するには、これをプロファイルファイルの最後に配置するだけです。

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

プロファイルを完全にめちゃくちゃにした場合は、から新しいプロファイルを取得できるコピーがあります/etc/skel/


1
「export PATH = $ PATH:/home/jeremy/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-29-a-ubuntu16.04/usr/bin」という追加の行が1つあるため、インストールしました。元気?
2017

3
この行は問題ありません。配置する場所を示すために例に含めました。
Videonauth

1
/etc/skel/.profile16.04では、"$HOME/bin"存在するかどうかのテストなしで、外観が異なることに注意してください。それがより良いバリアント(IMO)であったとしても、17.10で理由や誤って変更されたようです。
Gunnar Hjalmarsson 2017

@GunnarHjalmarssonは私の投稿でそれを指摘します。そうです、これは私が実行している17.10のskel / .profileです。
Videonauth 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.