パスの新しいディレクトリです。

パスの新しいディレクトリです。

変更せずに$ PATHから単一の実行可能ファイルを削除しようとしています。

たとえば、私はそのディレクトリにあり、/Users/USER/Library/Python/2.7/bin/そのディレクトリから除外$PATHしたいと思いますservices.py

効果があるとは知っていますが、chmod -x services.pyより良い方法を見つけようとしています。

可能ですか?

答え1

ファイルをサブディレクトリに移動できる場合は、ファイルの実行を回避できます。
そうでない場合は、いくつかの回避策があります。

回避したい実行可能ファイルの前に実行するように高い優先順位を追加できます。

パスの新しいディレクトリです。

PATH順の高い実行可能ファイルを生成できます。

そうであれば、(空の?)実行可能ファイルがその実行可能$PATHファイルよりも高い優先順位で実行されます。/usr/local/bin:/usr/bin:/bin/usr/bin/bin

$PATHこの方向では、(置き換える)前に新しい実行可能ファイルが実行されるように、先頭にパスを追加できます。services.py

一部のシェルはプログラムの実行パスを覚えています。 bashのコマンドで制御されますhash(hash -rはすべてのハッシュを削除します)。新しいbashシェルには、起動ファイル(通常および~/.bashrc/または)で実行されるプログラム以外にハッシュプログラムはありません~/.profile。したがって、PATH新機能を備えた新しいシェルは最初から機能します。

PATHを変更したり、ファイルを移動できない場合は、関数またはエイリアス定義を使用したり、~/.bashrc他の起動ファイルを使用したりできます~/.profile

関数とエイリアスは実行可能ファイルよりも優先順位が高いため、実行可能ファイルなどの関数(またはエイリアス)の名前を指定すると、その関数は定義されたシェルで効果的に置き換えられます。

機能

次のように簡単な作業を行います。

services.py(){ :; } # do nothing

テスト用にスペースを設定できますls

ls(){ :; }

削除機能を使用できますunset -f FunctionName

 $ unset -f ls

このls機能を削除してください。

関数は完璧ではなく、元の実行可能ファイルはフルパスで呼び出すことができます。

$ /bin/ls
listOfFiles

この機能は、「このシェル」がプログラムを実行するのを防ぐだけです。他のシェル(またはexecve独自に呼び出すことができるプログラム)は実行可能ファイルを実行します。

ニックネーム

エイリアスはあまり強力ではなく、単純なコマンドの最初の単語だけを置き換えます。
コマンドに何らかの参照がある場合、エイリアスは使用しません。

$ alias ls='echo "none"'
$ ls
none
$ \ls
ListOfFiles

エイリアス削除を使用できますunalias AliasName。したがって、次のようになります。

 $ unalias ls

エイリアス定義が削除されますls

PATHを変更する最も安定した方法です。新しいディレクトリをプリセットするか、ファイルを新しいディレクトリに移動します。$PATHプログラムの実行が許可されているインスタンスにのみこれらのディレクトリを含めます。

関連情報