実行可能プログラムを作成し、そのディレクトリをパスに追加しました。それでも実行されません。何を提供しますか?

実行可能プログラムを作成し、そのディレクトリをパスに追加しました。それでも実行されません。何を提供しますか?

私は試した:

gaspipe@kali:~/bashscripts$ ls
./  ../  addpath*  autoinstaller

gaspipe@kali:~/bashscripts$ cd ..

gaspipe@kali:~$ addpath
addpath: command not found

gaspipe@kali:~$ addpath*
addpath*: command not found

gaspipe@kali:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games/home/gaspipe/bashscripts

環境変数manに関連する問題は、PATHLinuxではこれほど難しいことはなく、非常に単純な概念です。しかし、パスにディレクトリを追加するスクリプトを作成するだけでも私にとっては難しいことです。
引き続きファイルを開き、長いパス名を入力したくありません~/.bashrc。ただ入力addpath <dir>して終わりたいです。

なぜこれが確立された手順ではないのですか?

答え1

ローカルフォルダは/usr/gamesディレクトリから分離されていません。

gaspipe@kali:~$ echo $PATH
...:/bin:/usr/local/games:/usr/games/home/gaspipe/bashscripts

それが必要です:

gaspipe@kali:~$ echo $PATH
...:/bin:/usr/local/games:/usr/games:/home/gaspipe/bashscripts

(違いをより明確にするためにPATHの始めを切り取りました。)

答え2

現在のシェル環境を操作するためのスクリプトが必要な場合は、次のスクリプトを入手する必要があります。

source ./addpath

または

. ./addpath

addpathまたは、シェル関数またはエイリアスを作成できます。

通常の方法でスクリプトを実行すると、現在のシェルは現在のシェル環境のコピーを使用してスクリプトを実行するための新しいプロセスを作成します。スクリプトはコピーを変更した後、スクリプトが終了するとプロセスが終了し、変更された環境が失われます。

一方、シェル関数とエイリアスは現在のシェルで実行されるため、コマンドラインセッションの環境を簡単に変更できます。

答え3

サンプルスクリプトがあります。

$ cd ~/bin
$ cat example
#!/bin/bash
echo Hello

sourceこれを実行するには、telcoMの答えのようにすることができます。

$ source example
Hello

ただし、自分で実行できるように実行権限を追加します。

$ ls -l
-rw-r--r-- 1 stew stew 23 Feb 12 10:15 example
$ chmod +x example
$ ls -l
-rwxr-xr-x 1 stew stew 23 Feb 12 10:15 example

これで、絶対パスまたは相対パスを参照してスクリプトを呼び出すことができます。

$ ./example
Hello
$ ~/bin/example
Hello

このコマンドを頻繁に実行したくない場合は、通常これで十分です。ただし、ファイルを頻繁に実行する場合は、場所を指定せずに実行可能ファイルを実行することをお勧めします。

$PATH通常、私はこのスクリプトをすでに指定された場所(たとえば)に配置します/usr/local/bin。すべてのカスタムスクリプトが同じ場所にあり、すべてのユーザーが使用できるため、クリーンな状態を維持するのに役立ちます。

場合によっては、ユーザー固有のスクリプトを含めたい場合があります。$HOME/binその場合は、そのディレクトリを$PATH環境変数に追加する必要があります。

PATH現在のコマンドに一時的にディレクトリを接続できます。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin
$ PATH=$PATH:~/bin example
Hello
$ echo $PATH
/usr/local/bin:/usr/bin:/bin

まだディレクトリパスを入力しているので、これはあまり役に立ちません。これは、環境変数を介して単一の実行のオプションを設定するのに最も便利です。

より長く持続したい場合(おそらくこのシェルセッションでコマンドを複数回実行したい場合)、シェルに設定できます。

$ PATH=$PATH:~/bin
$ example
Hello
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:~/bin

これは、次の 10 分間コマンドを複数回使用してから再度使用しない場合に便利です。ただし、新しい端末が起動すると、この変更は失われます。

を使用していると仮定すると、bashbashの起動時に自動的に設定して、セッション間でこの変更を維持することができます。次のコマンドは、新しいbashrcインスタンスが起動されるたびに実行されるユーザーディレクトリに自分のディレクトリを追加します。bash

$ echo 'PATH=$PATH:~/bin` >> ~/.bashrc

これで、新しいシェルを起動するたびに私のディレクトリに含まれ、パスをPATH指定せずに呼び出すことができます。exampleこれはシステムの他のユーザーには影響しません。

$ example
Hello

:特定の質問で最大の間違いは、$PATH既存のディレクトリとカスタムディレクトリの間にコロンを追加しないことです。

関連情報