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 のインストールと設定のグラフィックチュートリアル

推薦する

jQuery ベースのカレンダー効果

この記事では、カレンダー効果を実現するためのjQueryの具体的なコードを例として紹介します。具体的...

React Diff Principle の詳細な分析

目次差分アルゴリズムレイヤーごとの比較同じタイプのコンポーネントを比較する同じタイプの要素の比較子ノ...

Vue データの応答性の概要

データの応答性について話す前に、Vue はデータに対して具体的に何を行うのかという非常に重要な問題を...

LinuxにComposerをインストールする方法

1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...

更新SQL文に基づくMySQLロックの理解

序文MySQL データベース ロックは、データの一貫性を実現し、同時実行性の問題を解決するための重要...

HTML と JavaScript を使用してローカル メディア (ビデオとオーディオ) ファイルを再生する方法

まず、セキュリティ上の理由から、JavaScript はローカル リソース ファイルに直接アクセスで...

MySQL グローバルロックとテーブルレベルロックの具体的な使用法

目次序文グローバルロックテーブルロックテーブルロックメタデータ ロック (MDL ロック)要約する参...

ウェブサイトレイアウトにおける CSS の計算関数 calc の例

calc は数値を計算するために使用される CSS 関数です。長さ、角度、時間などを計算できます。 ...

MySQL スロークエリ関連パラメータの原理の分析

MySQL スロー クエリ (正式名称はスロー クエリ ログ) は、MySQL によって提供されるロ...

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...

Mysql5.7.17 winx64.zip 解凍バージョンのインストールと設定のグラフィックチュートリアル

1. mysql-5.7.17-winx64.zip をダウンロードします。リンク: https:/...

Tomcatのサーバーオプションの詳細な説明

1. 構成デフォルトでは、最初の 2 つはチェックされていないので、チェックする必要があります。 (...

Docker Hubの動作原理と実装プロセスの分析

GitHub が提供するコード ホスティング サービスと同様に、Docker Hub はイメージ ホ...

MySQL接続クエリの原理と応用

概要MySQL の最も強力な機能の 1 つは、データ取得を実行しながらテーブルを結合できることです。...

layui をベースにしたログインページの実装

この記事の例では、ログインページを実装するためのlayuiの具体的なコードを参考までに共有しています...