スクリプトのパスが実際のパスとは異なります。

スクリプトのパスが実際のパスとは異なります。

echo $PATHターミナルウィンドウにある場合は、以下が出力されます。

/home/charles/anaconda3/bin:
/home/charles/anaconda3/condabin:
/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
/usr/local/games:/snap/bin:/snap/bin:
/home/charles/.emacs.d/bin

ただし、root以外のスクリプトを実行すると、次のようになります。

#!/bin/sh
echo $PATH

私のホームディレクトリのパスではなく、ルートパスのみを出力します。

/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
/usr/local/games:/snap/bin:/snap/bin

spyder次のスクリプトで実行しようとしています。

$ which spyder
/home/charles/anaconda3/bin/spyder

スクリプトに自分のホームディレクトリのパス部分を認識させる方法はありますか?

解決済みemacs:パスにおよびを追加するコードをからに移動しましたanaconda~/.bashrc~/.profile

答え1

スクリプトはサブシェルで実行されます。つまり、対話型/ログインシェルによって作成されます。サブシェルは、スクリプト/プログラムを実行するための明示的な目的で作成されたシェルです。サブシェルのルールの1つは、以下を介してアクセスできることです。「父の皮」、しかしいいえローカル変数。

これは/home/...変数が次のようになることを示しています。地元の変数、つまりどこかに/何でも設定するという意味です。おそらく~/.bashrc

解決策は、スクリプトでローカルPATH変数を宣言する必要があることです。次のようにこれを行うことができます。

export PATH="$PATH:/home/charles/anaconda3/bin:/home/charles/anaconda3/condabin:/home/charles/.emacs.d/bin"

道は今です地元のスクリプト/サブシェルに保存され、グローバル変数に伝播されません。

関連情報