web-dev-qa-db-ja.com

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

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

/urs/bin/binary

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

/mount/new_version/binary

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

binary -doSomething

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

8
Viktor Stolbin

バイナリが/usr/bin/binaryにあり、スクリプトがフルパスを指定せずにバイナリを呼び出すが、代わりに/usr/binPATHにあることに依存している場合は、新しいバイナリの場所を追加するだけで済みます。ユーザーのPATHの先頭に。このようなものを~/.bashrcに入れます:

PATH=/mount/new_version:$PATH

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

alias commandname=/mount/new_version/binary

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

3
art3mis

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

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ファイルに配置します。

3
Douglas P.