自分に実行許可を(chmod u+x
で)与えずにファイルを実行するにはどうすればよいですか?
「プログラムとしてのファイルの実行を許可する」チェックマークをオンにすると、チェックマークはすぐに削除されます。
ファイルを所有していることが確実でない限り、これを先に実行してください。
次のいずれかの方法で実行しようとしているファイルを所有していることを確認してください。
ターミナルでこのコマンドを実行します
[ ! -O "/path/to/file" ] && echo "You don't own the file"
You don't own the file
」と表示される場合は、以下の「ファイルの所有権を変更する」を参照してください。ターミナルでこのコマンドを実行します
Sudo chown $USER:$(id -gn $USER) "/path/to/file"
コメント by Lekensteyn on answer for question about chmod
on NTFSパーティションは、それ自身の質問と回答に値すると思いますが、Lekensteynに全面的に貢献しています。
次のコマンドを実行可能ファイルに使用します(/path/to/executable
を正しいパスに置き換えます):
64ビットの実行可能ファイル:
/lib64/ld-linux-x86-64.so.2 /path/to/executable
32ビットの実行可能ファイル:
/lib/ld-linux.so.2 /path/to/executable
上記が機能しない(またはファイルが見つからないというエラーが発生する)場合は、上記のコマンドの前にこれを使用してみてください
cd "$(dirname /path/to/executable)"
上記のすべてのコマンドは、テキストベースのスクリプト(Bash、Python、Perlなど)では機能しません。以下を参照してください。
このコマンドを使用して、実行可能ファイルが32(x86
)または64(x86-64
)ビットかどうかを確認します
objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'
i386:x86-64
と表示されている場合、64ビットです。 i386
のみの場合、32ビットです。
テキストベースのスクリプト(Bash、Python、Perlなど)の場合、ファイルの最初の#!
行で指定されたコマンドを使用する必要があります。
たとえば、ファイルの最初の行が
#!/usr/bin/env python3
次に、ターミナルでこれらのコマンドを実行します(/path/to/file
を正しいパスに置き換えます)
cd "$(dirname /path/to/file)" # Not strictly necessary, see section below
# Replace '/usr/bin/env python3' with the first line without the front #!
/usr/bin/env python3 /path/to/file # Use './file' if you want
.jar
ファイルJava実行可能jarの場合、次のコマンドを使用できます(/path/to/jar
を正しいパスに置き換えます)。
cd "$(dirname /path/to/jar)" # Not strictly necessary, see section below
Java -jar /path/to/jar
cd "$(dirname /path/to/file)"
が必要ないときこれらは、何らかの方法でプログラムを実行する前にcd "$(dirname /path/to/file)"
を使用する必要がない状況です。少なくとも1つが真の場合、最初にcd
は必要ありません。
apt-get
のみを使用します)cd
(または同等のもの)を使用して、ファイル操作を行う前に絶対パスに変更します(例:cd "$(dirname "$0")"
)./
で始まるパスまたはスラッシュなしで始まるパス)を参照しません。不明な場合は、cd "$(dirname "$0")"
(または同等のもの)をスクリプトの先頭に追加するか(該当する場合)、とにかくcd "$(dirname /path/to/file)"
を使用します。
シェルスクリプトの場合、別のシェルスクリプトから「ソース」できます。
#!/bin/bash
# This script runs another script indirectly, by sucking in its contents and evaluating inline:
source /path/to/script/which/lost/its/exec/flag "$@"
「$ @」は、必要に応じてコマンドラインパラメーターを追加します。
とはいえ、これはおそらく根本的な問題の最善の解決策ではありませんが、代替案を提供するためにその問題について十分に知りません。