1. 概要

シェルスクリプトが実行可能でない場合、ターミナルで直接実行することはできません。 もちろん、スクリプトの実行権限を変更して実行できるようにすることもできます。 しかし、それが常に可能であるとは限りません。 たとえば、スクリプトが別のユーザーに属している場合、chmodコマンドを使用してスクリプトの実行権限を変更するために必要な権限がない可能性があります。

このチュートリアルでは、実行可能ではないスクリプトの実行について説明します。

2. 問題の分析

実行可能スクリプトがある場合は、ターミナルで直接実行できます。 次のスクリプトhello_world.shがあるとします。

#!/bin/bash
echo “Hello World"

このスクリプトは印刷するだけですこんにちは世界終了しますスクリプトのインタプリタは、シバン(#!)の後の最初の行で指定します。 この場合、インタプリタは/ bin/bashです。 これは、スクリプトの残りの部分を解析するためのインタープリターとしてBashを使用するようにオペレーティングシステムに指示します。

まず、このスクリプトの実行権限を確認しましょう。

$ ls –l hello_world.sh
-rwxr-xr-x 1 alice alice 31 May  6 08:32 hello_world.sh

スクリプトの実行権限はすべてのユーザーに設定されているため、ターミナルで直接実行できます。

$ ./hello_world.sh
Hello World

ここで、スクリプトが実行可能でない場合を考えます。 まず、スクリプト hello_world.sh using chmodの実行権限を削除しましょう。

$ chmod -x hello_world.sh
$ ls –l hello_world.sh
-rw-r--r-- 1 alice alice 31 May  6 08:32 hello_world.sh

ls –l コマンドの出力から明らかなように、スクリプトの所有者でさえも、誰もこのスクリプトを実行する権利を持っていません。 それを実行してみましょう:

$ ./hello_world.sh
-bash: ./hello_world.sh: Permission denied

このチュートリアルの残りの部分では、スクリプトhello_world.shを実行することを目的としています。

3. シェルを明示的に指定する

実行権限がないスクリプトを実行する1つの方法は、スクリプトの実行中にシェルを明示的に指定することです。 スクリプトhello_world.shを、Bashインタープリターを使用して実行してみましょう。

$ /bin/bash ./hello_world.sh
Hello World

ご覧のとおり、スクリプトの実行権限は設定されていませんが、実行することができました。 ただし、コマンドラインでインタープリターを指定する必要があるため、実行するのは少し不便です。 ここでは、スクリプトを実行するインタープリター / bin /bashを明示的に指定しました。

スクリプトの実行中にインタープリターを指定できる場合は、別のインタープリター、たとえば Kornshellを使用してスクリプトを実行できます。

$ /bin/ksh ./hello_world.sh
Hello World

この場合、スクリプトの実行中に指定したインタープリター / bin / ksh は、シバンの後にスクリプトで指定されたインタープリターをオーバーライドします。

この単純なスクリプトの場合、BashシェルとKornシェルの両方でスクリプトを実行することは成功しましたが、常にそうであるとは限りません。 異なるシェルの構文は、互いに完全に互換性がない場合があります。

4. スクリプトの調達

実行可能ではないスクリプトを実行する別の方法は、sourceコマンドを使用することです。 スクリプトを実行してみましょう、 hello_world.sh、 を使用してソース

$ source ./hello_world.sh
Hello World

ご覧のとおり、ソースを使用して実行できないスクリプトを実行しました。

スクリプトを調達するということは、現在のシェルでスクリプトを実行することを意味します。 したがって、スクリプトに exit コマンドが含まれている場合は、現在のシェル自体を終了する可能性があるため、注意が必要です。

ソースの代わりにドットまたはピリオド文字(。)を使用して、同じ結果を得ることができます

$ . ./hello_world.sh
Hello World

5. 結論

この記事では、実行可能ではないシェルスクリプトを実行する2つの異なる方法について説明しました。

まず、実行中にシェルを明示的に指定することで、実行権限のないスクリプトを実行できることを示しました。

最初の方法の代わりに、sourceコマンドを使用して実行可能ではないスクリプトを実行できることを確認しました。