シェルスクリプトの最初の行には何が書かれていますか?それはどういう意味ですか?私がその行を書かないとどうなりますか?では、スクリプトをどのように実行しますか? [コピー]

シェルスクリプトの最初の行には何が書かれていますか?それはどういう意味ですか?私がその行を書かないとどうなりますか?では、スクリプトをどのように実行しますか? [コピー]

シェルスクリプトの最初の行はどういう意味ですか?その行を作成しないとどうなりますか?では、スクリプトをどのように実行しますか?

答え1

最初の行(shebangと呼ばれる)は、ファイルを実行するためにどのインタプリタを使用する必要があるかを示します。 「関連性」とマークされたSteeldriverの答えは、何を期待しているのかをより詳細に伝えます。

だから始めると

 #!/bin/bash

bashこのファイルを解釈するために使用されます。他の一般的なランチャーは#!/usr/bin/perlまたはです#!/usr/bin/python。ただし、tstファイルを生成する場合はこれに限定されません。

#!/usr/bin/vi
jantje zag eens pruimen hangen
oh als eieren zo groot

、ファイルを実行可能にして(chmod +x tst)実行すると、(./tst)ファイルを編集するためにviが起動します。

質問の次の部分は、最初の行にshebangがないとどうなるかです。答えは、現在使用されている通訳者が使用されているということです。デモ:ファイルを作成するtst

ps -f

(shebangはなく、1行だけ)実行可能ファイルを作成し(chmod +x tst)実行します(./tst)。結果は次のようになります。

ljm@phi:~$ ./tst
UID        PID  PPID  C STIME TTY          TIME CMD
ljm       1379  1377  0 Oct06 pts/3    00:00:00 -bash
ljm      20769  1379  0 10:34 pts/3    00:00:00 -bash
ljm      20770 20769  0 10:34 pts/3    00:00:00 ps -f

(1379は現在シェルで、20769は解釈のためのbashtstなので、psの親(PPID)です。)

aを起動してやり直すshと、tst次のようになります。

ljm@phi:~$ sh
$ ./tst   
UID        PID  PPID  C STIME TTY          TIME CMD
ljm       1379  1377  0 Oct06 pts/3    00:00:00 -bash
ljm      20773  1379  0 10:34 pts/3    00:00:00 sh
ljm      20774 20773  0 10:34 pts/3    00:00:00 /bin/sh ./tst
ljm      20775 20774  0 10:34 pts/3    00:00:00 ps -f
$ 

それではsh説明しますtst

答え2

それでは、Shebangなしでスクリプトをどのように実行しますか?

ファイル(例:tst)にインポートすると、実行もできません。

source tst
. tst

(これらはbuitinsです - > help source

または

bash tst

これは次のようになります。

bash -c 'string of commands aka script'

これらの言語ソルバーと「コマンドストリーム」のマッチングは、Perl、sed、awkでもさまざまな方法で使用されます。

関連情報