変更せずに$ 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
プログラムの実行が許可されているインスタンスにのみこれらのディレクトリを含めます。