アーカイブから抽出されたプログラムを実行できないのはなぜですか?

アーカイブから抽出されたプログラムを実行できないのはなぜですか?

セージファイルをダウンロードした後、Firefoxとサンダーバード対応するシェルスクリプトをクリックするか、またはTrisquel 6.0の対応するWebサイトでプログラムを実行するコマンドを実行しても、そのシェルスクリプトは開かれません。ファイルの権限を確認すると、実際に実行可能です。

編集する:FirefoxとThunderbirdは奇妙に機能し始めましたが、Sageはまだ機能しません。最初のリンクからダウンロード後このページ、私のデスクトップに解凍し(FirefoxとThunderbirdはうまくいきます)、ターミナルでフォルダを開き、「sage」コマンドを実行しました(フォルダに同じ名前の実行可能ファイルがあるため)。エラーが発生しましたbash: sage: command not found。ただし、ls -l これらのファイルが存在し、実行可能であることが知られていることを示します。

編集#2:私はFirefoxとThunderbirdだけが機能すると思います。実際に私がインストールしたバージョンを実行しています。 Firefoxおよび/またはThunderbirdを実行すると./[executable]エラーが発生します。libxul.so: cannot open shared object file: No such file or directory Couldn't load XPCOM.

答え1

アーカイブからプログラムを抽出した後、最初に確認することが許可(chmod a+x ./sage)ですが、それが問題である場合は、「コマンドが見つかりません」ではなく「権限が拒否されました」というエラーメッセージが表示されます。

「ターミナルでフォルダを開き、コマンドを実行してください」という説明を考えると、実行中のコマンドは、sageこの名前のプログラムが現在のディレクトリで実行されると予想する可能性が高くなります。これはUnixが動作する方法ではありません。シェルは、リストされたディレクトリでのみプログラムを探します。PATH環境変数現在、ディレクトリを最初に暗黙的に検索しません。現在のディレクトリでプログラムを実行するには、そのパスを入力する必要があります。

./sage

パスを指定せずにプログラムを実行するには、そのプログラムをディレクトリ$PATH(通常/usr/local/binはまたは~/bin)にインストールする必要があります。実行可能ファイルをアプリケーションの他のファイルと一緒に保持し、シンボリックリンク次のディレクトリへ$PATH

ln -s /path/to/sage-5.9/sage ~/bin/

または、バイナリを含むディレクトリにすでに存在する場合sage

ln -s $PWD/sage ~/bin/

PATHのディレクトリにプログラムを追加しても、シェルがまだコマンドを見つけることができないと文句を言う場合は、以前にプログラムを試みて、シェルがキャッシュに「見つかりません」という情報を保持していた可能性があります。実行hash -rしてキャッシュを再構築し、もう一度やり直してください。シェル実行の間にキャッシュは保存されないため、次回シェルを起動すると問題はなくなります。

指定されたパスを使用して既存のファイルを実行し、「コマンドが見つかりません」というエラーメッセージが表示された場合は、次の理由が考えられます。正しいローダーがありません。。 CPUとカーネルをサポートするためにバイナリをダウンロードしても必要なユーザーモードのサポート(ライブラリなし)がない場合、これが発生する可能性があります。プログラムはスクリプトであり、そのプログラムはシェルボーンラインシステムに存在しないインタプリタを示します(この場合、一般的なシェルは「コマンドが見つかりません」の代わりに「間違ったインタプリタ」メッセージを表示しますが)。

答え2

実行可能ファイルの許可ビットを確認してください。また、実行可能ファイルがPATH

関連情報