【bash】シェルスクリプトは実行権限がなくても動きます

シェル/bash

bash: ./hello: Permission denied
シェルスクリプトを実行できない人

シェルスクリプトを実行できない人
「自作したシェルスクリプトが権限エラーで実行できません。権限を付与したりしてシェルスクリプトのファイル属性を変えたくないのですが、実行するための代替策はないですか?」

こんな悩みに答えます。

本記事の内容

  • シェルスクリプトを作成し実行権限を付与して実行する例
  • 《今回のテーマ》実行権限を付与したくない場合の代替策

シェルスクリプトを作成しchmodで実行権限を付与して実行する例

普通は次のようにスクリプトファイルを作成し、権限を付与してから実行します。

#!/bin/bash

echo "Hello, World"

↑のファイルをhelloという名前で保存します。

全ユーザ(a)にhelloスクリプトの実行権限(+x)を付けて、

$ chmod a+x ./hello

helloを実行します。

$ ./hello
Hello, World

スクリプトの2行目に書いたecho “Hello, World”が実行されました。

ファイルの権限の種類

シェルスクリプトの実行するには、スクリプトファイルに実行権限(x)を付与します。

権限の種類 権限の意味
r 読取り
w 書込み
x 実行

シェルスクリプトに実行権限を付与したくない場合の代替策

先の例ではchmodで実行権限(x)を付与しましたが、権限などのファイル属性を変更したくない場合は以下のようにすれば実行権限がなくても読み取り権限(r)だけあれば実行可能です。

実行コマンド

$ bash 《スクリプトファイル名》

実行例

シェルスクリプトファイル(hello)には実行権限がなく、読み取り権限が付与されています。

$ ls -l ./hello
-rw-r--r--  1 user  group  33 12  8 11:25 hello

以下のようにbashコマンドを指定して実行します。

$ bash ./hello
Hello, World

なぜ実行できたのか?

#!/bin/bash

実行権限を持ったスクリプトファイルを実行すると、1行目に記述したプログラムによって実行されます。

$ bash ./hello

一方、上記のコマンドを実行した場合は先頭にbashと明記しており、この場合に実行権限が必要となるのは./helloではなく、bashコマンドになります。

./helloというスクリプトを実行するのではなく、./helloというファイルを読んだbashを実行することになるので、./helloに実行権限がなくても実行できてしまいます。

スクリプトファイルの権限を変えたくない場合に便利です。

同じ理由で、次のようにも記載可能です。一度限りのスクリプトファイルを動的に生成して実行する場合、便利です。

cat hello | bash

今回は以上です。参考になりましたら幸いです。

Blog TOP  シェルスクリプトを勉強したい人向け|bashの使い方 記事まとめ

bashの使い方 - もくじ

bashの使い方 - もくじ

シェルとは

 - シェルとは
 - シェルはOSと会話するための言語
 - シェルの種類(bash以外のシェル)
 - シェルスクリプトとは
 - シェルスクリプトの書き方

条件式

 - if else文
 - 文字列の比較
 - &&と||の使い方
 - case文

文字列操作

 - 文字列の連結
 - 文字列の一部を切り出す

繰り返し

 - for文
 - while文
 - while文でリストから1つ要素ずつ処理する

定数

 - 定数の定義

関数

 - 関数の定義

デバッグ

 - デバッグオプション(-x)

実行権限

 - 実行権限のないシェルスクリプトファイルを実行する

 - シェルスクリプトの書籍3選