こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

scriptの実行するとき

linux初心者ですが教えてください。

linuxでscriptを作成して自分で実行するときですが

ファイル名.sh で実行できる時と
sh ファイル名.sh としないと動かないときがありますが
なぜでしょうか?

因みにredhatで実行権限は付けてます。

投稿日時 - 2014-07-27 14:08:22

QNo.8694299

すぐに回答ほしいです

質問者が選んだベストアンサー

>もっとわかりやすく説明してください。

・パスついての指摘
・スクリプトファイルの1行目が正しく記述されているかの指摘

の2つの指摘がされているのに「pathを指定しておけば頭にshがいらないという事なのですね。」と、なぜパスついての指摘だけで理解したつもりになってるんですか?
「・スクリプトの1行目は #! になっていますか、#! の指定が間違っていませんか」の意味がわからないなら説明を求めればいいだけで。

スクリプトスクリプトの1行目が

#!そのスクリプトファイルを実行するプログラムのパス

になっている必要があります(ファイル名のサフィックスが.shとか、そんなのはどうでもいい)。
そのスクリプトファイルのファイル名だけ動かしたい場合は
シェルスクリプトなら
#!/bin/sh

Cシェルスクリプトなら
#!/bin/csh

Perlのスクリプトなら
#!/usr/bin/perl

になっていないと動きません。
例えば

$ echo '#!/bin/sh' >aaa
$ echo 'echo abcdefg' >>aaa
$ cat aaa
#!/bin/sh
echo abcdefg
$ chmod +x aaa
$ ./aaa
abcdefg
$

上記の ./aaa の所ではlinuxがファイルの先頭が #! であるのを見て、#! の後に書いている /bin/sh で、そのファイルを実行します。

1. 先頭に #! にと書いてある
2. その後ろには /bin/sh と書いてあるから、それでファイルを実行すればいいんだな
3. では /bin/sh ./aaa を実行

という事がlinuxの内部で行われているんです。

投稿日時 - 2014-08-08 12:08:25

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

>pathを指定しておけば頭にshがいらないという事なのですね。

なぜ

>・スクリプトの1行目は #! になっていますか、#! の指定が間違っていませんか

を無視してるんでしょう。
もしかして読めませんか?

投稿日時 - 2014-07-31 21:53:17

補足

もっとわかりやすく説明してください。

投稿日時 - 2014-08-05 00:07:58

ANo.3

>○PATHが通っていない
>○スクリプトの1行目が#!になっていない
> この2点の両方を満たさなければいけないということでしょうか?

#1に書かれているのは、「sh ファイル名.sh としないと動かない」の原因と思われる事です。
なので、
・スクリプトはPATHが通った所にありますか
・スクリプトの1行目は #! になっていますか、#! の指定が間違っていませんか
って事ですよ。

投稿日時 - 2014-07-29 01:55:01

お礼

pathを指定しておけば頭にshがいらないという事なのですね。

投稿日時 - 2014-07-31 01:45:08

ANo.2

とりえあずwhichで実行ファイルを調べpathが通っていればヒットするでしょう

shで実行しているなら
#sh フルpath/実行ファイル

で実行して本当に動いていないのか確認してください
単に動いているけどエラーなのかもしれないし

普通に運用するにあたってはフルパスで実行するか、cdでカレントを移して、
./実行ファイル

で実行すればよいでしょう

投稿日時 - 2014-07-28 09:29:50

お礼

pathを指定しておけば頭にshがいらないという事なのですね

投稿日時 - 2014-07-31 01:45:27

ANo.1

○PATHが通っていない
Windowsでは、カレントディレクトリも自動でPATHに含まれているような動作をしますが、Linuxでは、明示的に含まなければカレントディレクトリは対象ではありません

○スクリプトの1行目が#!になっていない、あるいは #!の指定が間違っている

投稿日時 - 2014-07-27 14:44:32

補足

有難うございます。
○PATHが通っていない
○スクリプトの1行目が#!になっていない
この2点の両方を満たさなければいけないということでしょうか?

因みに同じディレクトリにshをつけなくても動くやつとshをつけないと動かないやつがあります。

投稿日時 - 2014-07-28 00:32:45

あなたにオススメの質問