Linuxで実行できないファイルへの実行可能なシンボリックリンクは可能ですか?

Linuxで実行できないファイルへの実行可能なシンボリックリンクは可能ですか?

リポジトリに保存されているいくつかのPythonスクリプトがあります。プレーンテキストファイルで実行可能ビットが設定されている場合、オンラインストアページはそのスクリプトをプレーンテキストページではなくバイナリにダウンロードします。したがって、私はこのスクリプトを実行不可能にするほうが良いです。

しかし、私もそれを使用したいと思います。原則として、次のようにすることができます。

sudo ln -s /path/to/wherever/I/have/put/myscript.py /usr/bin/

...その後、スクリプトが実行可能でshebangがある場合は、コマンドラインから次を呼び出すことができます。

myscript.py [ARGS]

...それは私が欲しいものです。ただし、スクリプト自体を実行可能にすると、上記のようにリポジトリダウンロードの問題が発生します。また、スクリプトが実行可能でない場合はいつでも、追加 - と a を使用してpython呼び出す必要がありますwhich(そうでない場合は、python現在のディレクトリでファイルを探します)。

python `which myscript.py` [ARGS]

…まだタイピングが多すぎて気に入らない。また、ファイルが実行できない場合は。my[TAB]中にあっても/usr/binタブ補完機能は動作しません。動作しますwhich

myscript.pyさて、おおよそ言えば、シンボリックリンクに対して別々の実行権限を持つことができれば、元の実行不可能な権限を維持しながらもコマンドラインから直接実行できることを願っています。 Mac OSXで可能かどうかはわかりませんが、ファイル権限はシンボリックリンクにどのように適用されますか? - ルートLinuxは、シンボリックリンク自体の権限ではなく、元のファイル権限のみを考慮するオプションをまったく提供していません。

だから私は知りたいです:

  • これを達成するために、他の種類のリンク(おそらく「ハードリンク」?)を使用できますか?
  • 基本的にシンボリックリンクに似たものを作成できますが、独自の権限セットを除いてソースコードと同じコピーを作成できるドライバやソフトウェアの種類はありますか?

ベストアンサー1

シンボリックリンクが機能しません。どちらのファイルも同じ権限を持つため、ハードリンク(可能な場合)も機能しません。しかし、私は次のようにしようとしています。/usr/bin/myscript.pyスクリプトをリンクするのではなく、スクリプト自体を実行するシェルスクリプトを作成します。

#!/bin/sh
exec python /path/to/wherever/I/have/put/myscript.py "$@"

引数を渡します"$@"。スクリプトが引数を受け入れない場合は、このセクションを安全に削除できます。

おすすめ記事