シェルスクリプトの#!/ bin / bashとは何ですか? / bin / shと/ bin / bashの違いは何ですか?シェルスクリプトが行なしで機能することがあるのはなぜですか?


ベストアンサー

#!/bin/bash

これはシバンと呼ばれ、次の行がbash用に記述されていることをインタプリタに通知するため、このファイルをbashスクリプトとして実行します。

#Example: Scripts are usually executed like below:

./scriptName

したがって、シバンはスクリプトの解釈方法を決定します。場合によっては、次のようになります。

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

したがって、これらの行はスクリプトの方法を決定します解釈され、実行されます。なぜ /bin/sh

構成されたシェルの1つを指し、sh

cshell, dash,zsh ,kshなどの他のシェル

例:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

したがって、スクリプトで#!/bin/shを使用している場合、スクリプトの動作はシェルはシステムを指しています。次のようなスクリプトを実行することで、シバンをオーバーライドできることに注意してください:

bash scriptName

#or

sh scriptName

上記の2つのケースでは、シバンは実行に影響を与えず、とsh(これが示すシェル)

回答

まあ、「正確に」それらがどのように機能するか詳細のレベルが多いため、ここではかなり不正確になります。すべてのプログラムは、コードをメモリの特定の専用セクションに配置し、そのメモリ内コードイメージのエントリポイントを呼び出すことによって実行されます。その後、プログラムは実行されます。

コードイメージをメモリに格納する動作は、オペレーティングシステムによって実行され、プログラムの「起動」または実行と呼ばれます。 OSはそれを独自のイニシアチブで1回だけ実行します。起動時に init プロセスを起動します。 init プロセスとその子孫は、 exec を呼び出すことにより、OSに他のプロセスを起動するように要求します。 OSシステムコール。

シェルは一度に特別であり、通常のものです。これは、他のプログラムと同じように実行される別のプログラムです。それは特別な超能力や特別な特性を持っていません。これは、主にユーザーが指定した他のプログラムを起動するために、ユーザーがOSのサービスにアクセスできるようにすることを目的としています。これは、ユーザーがファイルシステムにアクセスし、データ通信の標準ストリームの使用方法を指定できる、ユーザーがアクセスできるメソッドを提供します( stdin stdout 、および stderr )。

シェルは、以下に使用できるプログラミング言語を提供します。効率を上げるために、自動化された方法で決定と反復を行い、ユーザーの操作なしで作業できるようにします。これらは、プログラミング言語とコマンドライン処理を呼び出すためにユーザーが学習して使用する必要のある特別な構文と表記法を提供および使用します。シェルコマンドの処理は、対話型端末から、またはスクリプトを含むテキストファイルから行うことができます。

シェルが起動するプログラムは、シェルの子プロセスと呼ばれます。どのプロセスも別のプロセスを起動できるため、シェルはその意味で特別なものではありません。シェルは、ユーザーが子プロセスを起動する方法を指定できるように最適化されています。コマンドを使用して、Linuxホスト上のすべてのプロセスの階層を確認できます

ps -e lf

リストのどこかにあります ps プロセス自体であり、起動に使用したシェルプロセスの子プロセスとして表示されます。

そこにはるかに詳細です。 Quoraの回答でカバーするには多すぎます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です