特定のユーザーのバイナリへのパスを上書き


8

私の質問はささいなことのようですが、インターネットで役立つものを見つけることができませんでした。私はバイナリを持っています

/urs/bin/binary

しかし、それは時代遅れであり、新しいバージョンがいくつかのマウントで利用可能ですたとえば

/mount/new_version/binary

次のような形式でこのバイナリを呼び出すbashスクリプトがあります

binary -doSomething

古いバージョンではなく新しいバージョンのバイナリを呼び出すためにこのスクリプトが必要ですが、このスクリプトを変更する権限がありません。どういうわけかそれへのパスをオーバーライドする方法はありますが、それは私のユーザーだけですか?任意の助けいただければ幸いです。


許可されていない場合は、管理者にご相談ください。
スヴェン

回答:


11

バイナリが存在/usr/bin/binaryし、スクリプトが完全なパスを指定せずにバイナリを呼び出すが、代わりに/usr/bin存在に依存しているPATH場合は、新しいバイナリの場所をユーザーのの先頭に追加するだけPATHです。彼らにこのようなものを入れてください~/.bashrc

PATH=/mount/new_version:$PATH

セキュリティ上の理由から、スクリプトはこの種のことを防ぐためにバイナリへのフルパスを指定することがよくあります。


3

バイナリにアクセスできる場合は、それをバックアップしてシンボリックリンクを作成できます。

mv /urs/bin/binary /urs/bin/binary.bkp
ln -s /mount/new_version/binary /urs/bin/binary

[編集]

申し訳ありませんが、変更は1人のユーザーに対してのみ行う必要があることを確認していません。

バイナリの代わりに呼び出される関数を作成できます。

バイナリの実行方法(完全パスまたは名前のみ)に応じて、次のような適切な関数を作成する必要があります。

# Full path
function /urs/bin/binary () { command /mount/new_version/binary "$@"; }
export -f /urs/bin/binary
# Name
function binary () { command /mount/new_version/binary "$@"; }
export -f binary

バイナリが引数を受け入れない/必要としない場合は、「$ @」を削除します。

関数の作成を自動化するには、関数の行をユーザーのホームディレクトリの.profileファイルに配置します。


これはすべてのユーザーに影響します。それは受け入れられません。
Viktor Stolbin、2013年

申し訳ありませんが、変更は1人のユーザーのみに影響を与える必要があるため、回答を修正しました。
ダグラスP.

3

alias commandname=/mount/new_version/binary

パスステートメント/エクスポートの上の.bashrcまたはプロファイルで、十分に簡単に実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.