web-dev-qa-db-ja.com

bashスクリプトのコマンドとターミナルのコマンドの違い

端末に入力するコマンドとスクリプトに含めるコマンドの間に違いはありますか?

13
jth41

端末はシェル(ほとんどの場合bash)を実行します。これは、コマンドを要求して実行するシェルです。

このインタラクティブモードの他に、シェルを使用してファイルからコマンドを実行することもできます。ファイル内のコマンドを実行するには、bash scriptのようにシェルを直接呼び出すか、ファイルを "Shebang" #!/bin/bashで開始して実行可能(chmod +x script)にすることができます。次に、スクリプトをバイナリのように扱い、たとえば./scriptとして実行するか、シェルが探している場所に配置します。 (echo $PATH

ほとんどの場合、インタラクティブシェルと実行に使用されるシェルはどちらもbashです。 「初日Linuxの学習」の観点から見ると、bashはどちらのモードでもまったく同じように機能します。 -後で、わずかな違いについてつまずくかもしれません。本当に詳しく知りたい場合は、man bashを読み、「インタラクティブ」に言及している場所を検索することをお勧めします。 (/を押すと、manページを検索できます。)

注意すべき重要な点の1つは、スクリプトが新しいプロセスとして実行されることです。これは特に、スクリプトで設定された変数が呼び出し元のシェルに表示されないことを意味します。

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

エクスポートがない場合、aは内部スクリプトからも見えません。

7
michas

一般に、答えは「いいえ」です。シェルのコマンドは、スクリプトと構文およびセマンティクスで同じです。

しかし、環境の構成(使用される変数と設定される変数)に関連する小さなニュアンスがたくさんあります。

  • linuxに最適な対話型シェルはbashですが、スクリプトでは他のインタープリターがよく使用されます(shbashの前身であり、kshはbashと同等です)。なので、どのシェルが使用されているかを考慮する必要があります(現在のシェルの名前は従来、変数Shellに保持されています。echo $Shellと入力してみてください)。

  • 対話型セッションとスクリプト実行では、同じインタープリターの構成が異なる場合があります。

1
Dmytro Sirenko

番号。スクリプトは、ターミナルに入力できるコマンドのリストです。

スクリプトの全体をターミナルに貼り付けることができ、結果はスクリプトを実行した場合と同じになります。

逆に、ファイル内に端末コマンドを「保存」して再利用可能なスクリプトに変換し、家族や友人と共有することができます。

0
shigazaru