bashスクリプトを実行する方法は?


19

そこで、最初のbashスクリプトを作成しました。

#!/bin/bash
echo 'hello world!'
exit

私はそれがbashするのに適切な場所を持ち、実行可能であることを知っています:

$ which bash
/bin/bash
$ chmod +x myscript.sh

コマンドラインから実行したいのですが、エラーが発生します。

$ myscript.sh
myscript.sh: command not found

だから代わりに私はこれを試して、それが動作します:

$ bash myscript.sh
hello world!

これは私が常に実行する必要がある方法ですか?を前に付けずに他のスクリプトを実行したように感じbashます。myscript.shを前に付けずに実行するにはどうすればよいbashですか?

更新:ここでは、bashスクリプトを実行する理由と方法を説明します

回答:


28

ファイルを実行可能にする必要があります。あなたはそれをすることができます

chmod +x <filename>

どこにスクリプトの名前があり、それを./先頭に追加して、ローカルディレクトリのファイルを実行するようにシェルに指示する必要があります:

./script.sh

自分の中にあるファイル、PATHまたはそれらへのパスを指定したファイルのみを実行できます。./ローカルディレクトリは、PATH誰かが悪意のある目的で使用する可能性があるため、デフォルトではありません。lsディレクトリにdropと呼ばれるスクリプトを想像してください。そのディレクトリ内で実行するlsと、そのスクリプトは何か悪いことをします。

あなたがそれをしている間に、あなたはbashの代わりにshellを実行することで、よりポータブルにしたいかもしれません:

#!/bin/sh

または、インストールされている限り、インストールされている場所に関係なくbashを実行します。

#!/usr/bin/env bash

私はすでにchmod + x myscript.shでそれを行っています。私は間違っていましたか?
アンドリュー

1
あなたはおそらく行方不明です。/私は答えにそれを追加しました。
pupeno

1

フェルナンデスによるアドバイスに加えて、次のようにポイントを前に付けます。

./myscript.sh

セキュリティ上の理由から、現在のディレクトリが実行パスに含まれることはありません。


1

bashスクリプトを実行するには3つの方法があります。実行するスクリプトとしてmyscript.shの例を使用します。

方法1

スクリプトをサブプロセスとして実行します。これにより、書き込み所有者でない場合、アクセス許可の問題が発生します。chmodで許可を変更できます。

$ chmod + x myscript.sh

$ ./myscript.sh

方法2

現在のユーザーとしてスクリプトを実行します。bashスクリプトが適切に記述されている場合、エラーは発生しません。

$ bash myscript.sh

方法3

方法2に似ていますが、ショートカットです。これは、現在のセッションでbashシェルを使用しているという前提に基づいていることに注意してください。

$ myscript.sh

お役に立てれば!:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.