概要
テキストエディタで、適当なtest.shを作成して実行許可を出せば実行できる。
もしくは
bash test.sh
とターミナルに入力すれば実行できる。
背景
むかしむかし、まだMacやLinux系を触り始めたころ、シェルの存在を知った。
「複雑で、長くて、複数のターミナルコマンドも簡単に何度でも実行できる。すげーじゃん」って感じて、試しに作ってみた。
<test.sh>
#!/bin/bash
ls
上記の中身は超簡単。
lsでディレクトリ内のファイルを表示するだけ。
しかし、ターミナルで
./test.sh
と実行しようとしても、次のようなエラーで動かず。
-bash: ./test.sh: Permission denied
課題
作成したシェルスクリプトをエラーなく実行したい。
解決法
上記のエラーはなんてことはない、test.shの実行許可がないだけなのだ。
Mac的には、「どこの馬の骨かも分からない誰かのプログラムを実行しては、ご主人の大事なファイルを消されるかもしれない、情報を取られるかもしれない!」ということだろう。
解決方法は2つある。
1つ目。
それを作ったのはまさにご主人なので、「(このプログラムを作ったのは馬の骨ではなく、君のご主人だ。)実行しても問題はない。」ということをMacに伝えてあげれば良い。
ターミナルで、
chmod a+x test.sh
と入力すれば、このtest.shに対して、全てのユーザーが実行できるようになる。
2つ目。
この訳の分からないtest.shが実行に戸惑うなら、それを、あざむけばよい。
つまり、「(test.shを実行しようってんじゃないんだよ。ただただMacさんのよく知っている)bashを実行しようとしているだけだよ」とすれば良い。
つまり、ターミナルで
bash test.sh
として実行すれば良い。
これで、実行ができるはず。
追加情報
上記で触れた「実行許可」について。
各ファイルがどのような許可が出されているかは次のコマンドで見ることができる。
ls -ld test.sh
この出力は例えば、
-rw-r–r– 1 username1 staff 15 2 9 18:09 test.sh
である。
この最初のrとかwが今、認められている許可である。
それぞれの意味は、
r: 読み取り許可
w: 書き込み許可
x: 実行許可である。
なぜ、たくさん書かれているかというと、ユーザーによって許可を変えられるから。
タイプ | オーナー | グループ | その他 |
– | rw- | r– | r– |
タイプとはファイルなのか、ディレクトリ(フォルダー)なのかを示している。
下記のような感じ。
– | 一般ファイル |
d | ディレクトリ |
l | シンボリックリンク |
上記で示した実行許可をだしてから、
ls -ld test.sh
で、許可を見てみと、
-rwxr-xr-x 1 username1 staff 15 2 9 18:09 test.sh
となって、全てのユーザーに実行許可が出ているのが確認できるはず。
コメント