すべての入力をありがとう。ここで自分の質問に答えて、スクリプトとバイナリを実行するさまざまな可能性についての完全なガイドを提供します。編集してコメントしてください。そうすれば、完全で正しい何かを思い付くことができます。これが私の提案です:
最初に、次の2つの点について述べます。
Linuxはコマンドとパスを区別します。コマンドがプロンプト上にあるとしてのみ入力され、そして実行されます内蔵または対応するバイナリか、$ PATH上のスクリプトを探すためのLinuxの原因となります。
Linuxが何かをパスとして解釈するには、少なくとも1つのスラッシュ(/)が含まれている必要があります。たとえばでは./myScript
、./
かなり冗長に見えることができます-それは唯一のLinuxは、パスではなく、コマンドとしてそれを解釈するためにあります。
したがって、バイナリまたはスクリプトを実行するためのオプション:
バイナリを実行するbinary
:
$ binary # when 'binary' is on the PATH, or is a built-in
$ ./binary # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir
スクリプトの実行script
:
特に明記されていない限り、ファイルには実行権限が必要です。
$ script # execute a script that is on PATH. Will be executed in a new shell.
# The interpreter to use is determined by the she-bang in the file.
$ ./script # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir.
# Otherwise as above.
$ . script # execute a script in the current dir. Will be executed in the
# current shell environment.
$ source script # equivalent to the above *1
$ sh script # executes 'script' in a new shell *2 (the same goes for 'bash ...',
# 'zsh ...' etc.). Execute permission not neccessary.
シバンについて:
#!/bin/sh
最初の行にシバン(例えば)が付いたスクリプトは、使用するインタープリターを示します。
- このインタプリタは
./script
、コマンドによって実行されたとき、またはコマンドを使用したときに使用されます:script
(script
PATH上にある必要があります)
- を使用
sh script
すると、シバンは無視され、この場合sh
はインタプリタとして使用されます
. script
or source
を使用すると、シーバンが無視され、現在のインタープリターが使用されます(.
or source
は、現在のシェルでスクリプトの各行を実行するのと同じであるため)
脚注
* 1:これはほぼ真実です。bashで、彼らは確かに同じコマンドですが、使用している場合source
、script
$ PATHに検索されます前に、現在のディレクトリ。これはbashですが、POSIXのみのシェルでsource
は機能しませんが、.
機能します。したがって、移植性のために後者を使用してください。
* 2:実際に起こることは、引数として 'script'を使用してバイナリshを実行することです。これにより、 'sh'は新しいシェルで 'script'を実行します。