Ubuntu で .sh ファイルを実行するいくつかの方法の違いについて簡単に説明します。

Ubuntu で .sh ファイルを実行するいくつかの方法の違いについて簡単に説明します。

序文

特に bash 環境では、スクリプトの実行方法によって結果が異なります。スクリプトを実行する方法は、おおよそ次のとおりです。

まず、簡単な test.sh ファイルを作成します。

#!/bin/bash

read -p "あなたの名前を入力してください:" firstname
read -p "姓を入力してください:" lastname
echo -e "\nあなたのフルネームは: $firstname $lastname"

sh test.shを使用して実行します

sh test.sh を使用してスクリプト ファイルを実行します。このメソッドは、sh シェルを使用して test.sh ファイルを実行することを示します。sh は bash に置き換えられました。test.sh では、#!/bin/bash を使用してファイルを実行することを宣言していますが、bash の代わりに sh を使用すると、#!/bin/bash は機能しなくなります。

bashを使用してtest.shを実行する

この方法は、スクリプト ファイルを実行するために /bin/bash シェルを使用する点を除いて、実際には sh test.sh の原理と同じです。

したがって、実際には、dash test.sh も使用できます。スクリプトを実行するためにどのシェルを使用するかによって異なりますが、sh、bash、dash にはいくつかの違いがあります。let などの一部のキーワードについては、bash はサポートしますが、sh と dash はサポートしません。一部のキーワードについては、bash の使用を選択してください。

point.Executeを使用する

この方法を使用する前に、ファイルに実行権限を追加する必要があります。

$ chmod +x テスト.sh

実行権限を追加したら、./test.sh を使用してスクリプトを実行できます。この方法は bash test.sh と同じです。デフォルトでは、bin/bash を使用してスクリプトが実行されます。

この実行方法のみ、ファイルに実行権限を追加する必要があります。他の方法では必要ありません。

ソースを使用して実行

ソースを使用してスクリプトを直接実行することもできます。

ソース test.sh

違い

sh test.sh、bash test.sh、./test.sh を使用してスクリプトを実行すると、test.sh スクリプトは新しいシェル環境を使用してスクリプト内のコマンドを実行します。つまり、これら 3 つの方法を使用する場合、スクリプトは実際には子プロセスのシェルで実行されます。子プロセスが完了すると、子プロセス内の変数と操作は終了し、親プロセスに返されません。

理解できない? ?次の例を見てください。

[root@ubuntu] # bash test.sh
名前を入力してください: yao <==名前を入力してください
姓を入力してください: pentonBin <==姓を入力

あなたのフルネームは: yao pentonBin です
[root@ubuntu] # $firstnameをエコーし​​ます
       <==ここでは出力なし

ソースメソッドを使用してスクリプトを実行するとどうなるでしょうか?

[root@ubuntu] # ソース test.sh
名前を入力してください: yao <==名前を入力してください
姓を入力してください: pentonBin <==姓を入力

あなたのフルネームは: yao pentonBin です
[root@ubuntu] # $firstnameをエコーし​​ます
yao <== ここでfirstnameを出力します

つまり、source メソッドは親プロセスでスクリプトを実行し、test.sh のすべての操作は元のシェルで有効になります。システムからログアウトせず、~/.bashrc に書き込まれた設定を有効にしたい場合は、bash ~/.bashrc ではなく source ~/.bashrc を使用する必要があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • シェルがPythonファイルを実行するときにスペースを含むパラメータを渡す問題を解決する
  • Linux シェル スクリプトを使用して、指定されたファイルのバッチ ダウンロードの FTP スケジュール実行を実装します。
  • Linux でシェル スクリプトを使用してスクリプト ファイルを自動的に実行する
  • Linux で .sh ファイルを実行するときに「No such file or directory」というメッセージが表示される場合の対処方法 (3 つの解決策)
  • シェルで「マルチスレッド」スクリプト実行を実装するための完璧なソリューション
  • シェル スクリプトの実行時に「そのようなファイルまたはディレクトリはありません」というプロンプトが表示される場合の解決策

<<:  Vue CLI のモードと環境変数の詳細な説明

>>:  MySQL 5.7.24 のインストールと設定のグラフィックチュートリアル

推薦する

Nginx 構成 PC サイトとモバイル サイトの分離によるリダイレクトの実現

PCサイトとモバイルサイトの分離設定にはnginxを使います。私のPCサイトとモバイルサイトは、SE...

JavaScript の構成と継承の説明

目次1. はじめに2. プロトタイプチェーン継承3. コンストラクタの継承4. 組み合わせ継承1. ...

JSコードコンパイラMonacoの使い方

序文私が必要としているのは、構文の強調表示、関数プロンプト、自動行折り返し、およびコードの折りたたみ...

...

JavaScript Domはカルーセルの原理と例を実装します

カルーセルを作りたい場合、まずその原理を理解する必要があります。画像を右から左にスライドさせるにはど...

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

Windows での MySQL 8.0.15 のインストールと設定方法のグラフィック チュートリアル

この記事では、参考までにMySQL 8.0.15のインストールと設定方法のグラフィックチュートリアル...

MySQL でグループ化した後、各グループの最大値を取得する詳細な例

MySQL でグループ化した後、各グループの最大値を取得する詳細な例1. テストデータベーステーブル...

VUE 3 テレポート コンポーネントと使用構文をすぐに使い始める

目次1. テレポートの紹介1.1. 複数のテレポートを使用する2. テレポートを使用する理由3. テ...

JavaScriptのアロー関数の特徴と通常の関数との違い

目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...

MySQL count(1)、count(*)、count(field)の違い

目次1. COUNTの初見2. COUNT(フィールド)、COUNT(定数)、COUNT(*)の違い...

Linuxのファイル操作の知識ポイントを詳しく解説

ファイル操作に関連するシステムコール作成するint creat(const char *ファイル名,...

シンプルなタブバー切り替えコンテンツバーを実装するJavaScript

この記事では、タブバーの切り替えコンテンツバーを簡単に実現するためのJavaScriptの具体的なコ...

CSSセレクタを使用してラベルスタイルを設定するサンプルコード

CSS セレクターHTML タグにスタイルを設定すると、タグの属性を設定できます。 <div ...

Vue で debouce の手ぶれ補正機能を使用する方法

目次1. 手ぶれ補正機能2. Vueでdebouceの手ぶれ補正機能を使用する1. 手ぶれ補正機能2...