私はしばらくの間Linuxを使用しており、これの完全な概要を探していましたが、見つかりませんでした。
スクリプトやバイナリを実行するさまざまな方法に対応できません-私にとっては非常に面倒で、何を使用すべきかを判断するには試行錯誤をしなければなりません。スクリプトまたはバイナリ<script/binary>
であるファイルの場合、次の代替案を思いつくことができます。
<script/binary>
. <script/binary>
./<script/binary>
source <script/binary>
sh <script/binary>
(もっとありますか?)
誰かがどのコマンドがどの種類のファイルで機能するのか、複数のオプションがある場合の違いは何ですか?
ありがとう。
次のコマンドは同じですが、ドットコンポーネントは「現在のディレクトリ」を意味します。実行を許可するには、ファイルに実行可能権限が必要です。
path/to/binary
./path/to/binary
パスにスラッシュが含まれていない場合、コマンド(シェル組み込みコマンドまたは$PATH
環境変数で検索されるプログラム)として扱われることに注意してください。
以下はほとんど同じで、現在のシェル環境でShellスクリプト(バイナリではありません!)を実行します。この2つの行のわずかな違いについては、この nix.SEの質問 で説明しています。
. path/to/script
source path/to/script
最後に、sh script
について言及しました。繰り返しますが、これはShellスクリプトでのみ機能し、バイナリでは機能しません。基本的に、スクリプト名を引数としてsh
プログラムを実行しています。 sh
の場合、この引数をシェルスクリプトとして扱い、実行します。
シェルスクリプトに限定された回答については、 シェルスクリプトを実行するさまざまな方法 を参照してください。
すべての入力をありがとう。ここで、自分の質問に答えて、スクリプトとバイナリを実行するさまざまな可能性についての完全なガイドを提供します。編集してコメントしてください。完全で正しいものを思い付くことができます。私の提案は次のとおりです。
最初に、述べるべき2つのポイント:
Linuxは、commandとpathを区別します。 commandはプロンプトでそのまま入力され、組み込みを実行するか、Linuxに対応するバイナリまたはスクリプトを検索させます$ PATHで。
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
を使用すると、she-bangは無視され、この場合はsh
がインタープリターとして使用されます。. script
またはsource
を使用すると、she-bangは無視され、現在のインタープリターが使用されます(.
またはsource
は、現在のシェルでスクリプトの各行を実行するのと同じです)脚注
* 1:これはほとんど事実です。 bashでは実際には同じコマンドですが、source
を使用すると、script
が$ PATHbeforeで検索されます現在のディレクトリ。これはbashですが、POSIXのみのシェルでは、source
は機能しませんが、.
は機能します。移植性のために後者を使用してください。
* 2:実際に起こることは、引数として 'script'を使用してバイナリshを実行することです。これにより、新しいシェルで 'sh'が 'script'を実行します。
コマンドの簡単なリストを以下に示します。 PATHに言及するとき、システムが知っているプログラムを含むディレクトリを意味することに注意してください。 echo $PATH
でそれらを見つけると、次のようになります:/home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
スクリプト
./myscript.sh
を使用します./myscript.sh textfile.txt
を使用しますスクリプトは引数を指定して実行することもできます。 Rute (p。68)で説明されているように、myfile.sh dogs cats birds
はThe first argument is: dogs, second argument is: cats, third argument is: birds
を出力します。これは、シバン後のこのスクリプトのコンテンツがecho "The first argument is: $1, second argument is: $2, third argument is: $3"
であるためです。
別のディレクトリでスクリプトを実行するには、~/Scripts/dogs.sh
を使用します
scriptname
を使用します。get_iplayer
バイナリ
vlc <stream url to open>
)を使用します。~/<folder>/app/myprog
を使用します