ターミナルでbashスクリプトを実行するにはどうすればよいですか?


108

私は次のようなbashスクリプトを持っています:

#!/bin/bash

echo Hello world!

ターミナルでこれを実行するにはどうすればよいですか?


27
実行権限はありますか?試してみてくださいchmod +x scriptname、その後./scriptname
10

回答:


49

$prompt: /path/to/scriptEnterキーを押します。スクリプトに実行権限があることを確認する必要があることに注意してください。


1
あなたは既にしている場合/path/to で例えば、ディレクトリcd /path/toコマンド、次のように入力します。./scriptこの場合./ 『スクリプト』の前に、あなたのscript.Don'tを忘れる実行する
FrViPofm


26

スクリプトを含むディレクトリにcdするか、$ PATHにあるbinフォルダーに置きます。

次に入力

./scriptname.sh

同じディレクトリにある場合、または

scriptname.sh

binフォルダーにある場合。


9
これは、スクリプトに実行ビットが設定されている場合にのみ機能します。それはおそらく対処する必要があります。
Bryan Oakley、2010

./scriptname.sh私のために働くが、scriptname.sh与えるscriptname.sh: command not found-rwxr-xr-xその権限です。
Spikatrix 2017

1
cdどこにでもというアドバイスは、初心者によくある別の誤解を犯します。スクリプトが特定のディレクトリで実行することを必要とする依存関係をスクリプトに内部的に持たない限り(スクリプトがポイントするオプションを不可解に提供しないデータファイルを読み取る必要がある場合など)cd、実行するためにどこにも必要がないはずです。多くの場合、したくありません。
tripleee

24

あなたがすることができます:
sh scriptname.sh


6
反対票:それが適切にBashスクリプトである場合、それは誤りです。
tripleee

1
賛成票:bashスクリプトが同じディレクトリにある場合、Mac OS Xでは問題ありません
Karl Taylor

30
@kot「たまたま私のために働く」は「これは正解です」とはかなりかけ離れています。それは可能ならば仕事shへのシンボリックリンクであるbash、またはスクリプトがどんなバッシュ固有の構文を使用していない場合。前者の場合、のbash代わりにを使用することがsh唯一の正しいポータブルなソリューションです。後者の場合、OPは特にBashスクリプトのアドバイスについて尋ねたので、これはこの特定の質問に対する正しい答えではありません。間違った答えを実行することは無責任です。違いを理解できないユーザーはここに頻繁に投稿し、この「私にとってはうまくいった」という答えがうまくいかなかった理由を示す必要があります。
tripleee

:このトピックに関するいくつかの人気の重複のターゲットのあまりに^一つ@kraftydevil stackoverflow.com/questions/5725296/...
tripleee

5
@kot私が繰り返します:これが機能する状況があります(ちょうどあなたが見つけたように)、それは見出しの質問に対する一般的なケースでは正しい答えではありません。少なくとも、この回答はそれが機能する条件を説明しているはずです。しかし、私の提案は、この回答を単に削除することです。
tripleee 16

14

まず、次を使用して実行可能にする必要がありますchmod +x name_of_your_file_script

実行可能にしたら、次を使用して実行できます ./same_name_of_your_file_script


10

cdコマンドを使用して、スクリプトが配置されている場所にディレクトリを変更します。

次に入力します

bash program-name.sh

6
cdどこにもする必要はありません。の引数として任意の複雑なパス名を指定できbashます。実際、ファイル名の引数をとるプログラムはすべてこのように機能します(または、恐ろしいことに、驚くほど壊れています)。
tripleee 2016

10

これは古いスレッドですが、私はそれを偶然見つけました。誰もまだ完全な答えを出していないことに驚いています。だからここに行く...

コマンドラインスクリプトの実行チュートリアル!

Q:これをターミナルで実行するにはどうすればよいですか?

混乱と対立:

  • 「拡張子」(.shや.pyなど)必要ありませが、追跡するのに役立ちます。害はありません。ただし、スクリプト名に拡張子が含まれている場合は、それを使用する必要があります。
  • 何らかの理由で特定のディレクトリにいる必要ありませ
  • 必要がない限り、ファイルを実行するプログラム(BASHまたはPythonなど)の名前を入力する必要ありませ。害はありません。
  • これを行う必要ありませsudo。このコマンドは、別のユーザーまたは「root」(管理者)ユーザーとしてコマンドを実行するために予約されています。ここに素晴らしいポスト

(スクリプトの実行方法を学んでいるだけの人は、新しいプログラムのインストールなど、本当に必要がない限り、このコマンドを使用しないでください。スクリプトを置くのに適した場所は〜/ binフォルダーです。を入力するcd ~/bincd $HOME/bin、ターミナルプロンプトから入力します。そのフォルダに対する完全な権限が与えられます。)

Unix / Linuxタイプシステムのターミナルから「このスクリプトを実行」するには、次の3つのことを行う必要があります。

  1. スクリプトの場所をシステムに通知します。(一つを選ぶ)

    • スクリプト名を含むフルパスを入力します(例:)/path/to/script.sh。入力するpwdecho $PWDターミナルでフルパスを確認できます。
    • 同じディレクトリから実行し、./パスに使用します(例:)./script.sh。簡単です。
    • システム上のディレクトリにスクリプトを置き、PATH名前を入力します(例:)script.sh。システムを確認するにはPATH、入力するecho $PATHecho -e ${PATH//:/\\n}、リストを整理します。
  2. スクリプトに実行権限があることをシステムに通知します。(一つを選ぶ)

    • chmod +x /path/to/script.sh端末に入力して「実行ビット」を設定します。
    • chmod 755 /path/to/script.sh数字がお好みの方にもご利用いただけます。ここでクールなチャートとの素晴らしい議論があります
  3. システムにスクリプトのタイプを伝えます。(一つを選ぶ)

    • スクリプトの前にプログラムの名前を入力します。(例えばBASH /path/to/script.shまたはPHP /path/to/script.php)スクリプトに.phpや.pyなどの拡張子がある場合、それはスクリプト名の一部であり、含める必要があります。
    • シバンを使う#!/bin/bash例では()があると思うします。それをスクリプトの最初の行として使用している場合、システムはそのプログラムを使用してスクリプトを実行します。プログラムを入力したり、拡張機能を使用したりする必要はありません。
    • 「ポータブル」シバンを使用します。また、PATHを使用して、最初にプログラムのバージョンを選択し、#!/usr/bin/envその後にプログラム名(#!/usr/bin/env bashまたはなど#!/usr/bin/env python3)を選択させることもできます。ここで徹底的に議論されるように、長所と短所があります

1
かなり良い要約。たぶん最後の例script.shscript.phpは、これらのスクリプトのリテラルファイル名であり、ファイル名に拡張子を付ける場合は、スクリプトを実行するときにそれを含める必要があります(その逆も同様です。スクリプトがそうでない場合)。拡張子はありません。拡張子を付けないでください)。これは、たとえば、ファイル名から、.batまたは.exeファイル名を省略できるDOSとは異なり、実行可能と見なされるためには、小さなセットの拡張子を持つファイルが必要です。
tripleee

1
他の一般的な初心者の間違いは、違いを誤解されpath/path./path、と~/path。おそらくここでは説明したくないと思いますが、おそらく...などの説明へのリンクを貼ってください。これ
tripleee


-2

スクリプトファイルを使用できるディレクトリまたはフォルダーにいる場合は、次のようにして、実行可能モードでファイルのアクセス許可を変更するだけです。

chmod +x your_filename.sh

その後、次のコマンドを使用してスクリプトを実行します。

$ sudo ./your_filename.sh

の上に "。" 現在のディレクトリを表します。注意!bashスクリプトファイルが存在するディレクトリにいない場合は、次のコマンドを使用して、ファイルが配置されているディレクトリを変更します。

cd Directory_name/write the complete path

コマンド。そうしないと、スクリプトを実行できません。


私がこの特定の問題に関するすべての関連概念に言及しているので、すべてが完全にこれを行うことを願っています。
Hassan Shamshir

ここでは他の回答で説明したように、sudoある間違った、潜在的に恐ろしく間違っているあなたはどの虐待あなたが不それを与えた権限を信頼できないスクリプトにそれを使用する場合。
tripleee

cdどこかへのアドバイスは理解しにくいですが、おそらく間違っています。
tripleee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.