【bash】シェルスクリプトは実行権限がなくても動きます
こんにちは。
普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】
» 参考:【一生使える本です】bashの解説書 厳選3選【おすすめ】
今回は、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の使い方 - もくじ
シェルとは
- シェルとは
- シェルはOSと会話するための言語
- シェルの種類(bash以外のシェル)
- シェルスクリプトとは
- シェルスクリプトの書き方条件式
- if else文
- 文字列の比較
- &&と||の使い方
- case文文字列操作
- 文字列の連結
- 文字列の一部を切り出す繰り返し
- for文
- while文
- while文でリストから1つ要素ずつ処理する定数
- 定数の定義
関数
- 関数の定義
デバッグ
実行権限
本
「今の会社を辞めて転職します。エンジニア職に強みのあるおすすめの転職サイト・転職エージェントを教えて欲しい。また好条件で転職するにはどうすれば良いですか?」こんな悩みに答えます。 ITエンジニアに強いおすすめの転職サイト・転職エージェント3選 転職成功には強くてニューゲームが条件。どうやって実現する?