GNU/Linux >> Linux の 問題 >  >> Linux

sourceコマンドを使用して関数と変数をBashにインポートします

Linuxシェルにログインすると、特定の作業環境を継承します。 環境 、シェルのコンテキストでは、コマンドが意図したとおりに機能することを保証する特定の変数がすでに設定されていることを意味します。たとえば、PATH環境変数は、シェルがコマンドを探す場所を定義します。これがないと、Bashで実行しようとするほとんどすべてが、コマンドが見つかりませんで失敗します。 エラー。あなたの環境は、あなたが日常の仕事をしている間はほとんど見えませんが、非常に重要です。

シェル環境に影響を与える方法はたくさんあります。 〜/ .bashrcなどの構成ファイルに変更を加えることができます および〜/ .profile 、起動時にサービスを実行したり、独自のカスタムコマンドを作成したり、独自のBash関数をスクリプト化したりできます。

ソースを使用して環境に追加

Bash(および他のいくつかのシェル)には、 sourceと呼ばれる組み込みコマンドがあります。 。そして、ここで混乱する可能性があります: source コマンドと同じ機能を実行します (はい、それは1つのドットにすぎません)、そしてそれはではありません 同じソース Tclとして コマンド( man source と入力すると、画面に表示される場合があります )。組み込みのソース コマンドがPATHにありません 実際には、まったく。これはBashの一部として含まれているコマンドであり、それに関する詳細情報を取得するには、 help sourceと入力します。 。

コマンドはPOSIXに準拠しています。 ソース コマンドはPOSIXで定義されていませんが、と互換性があります。 コマンド。

Bashの詳細

  • バッシュチートシート
  • Bashを使用したプログラミングの概要
  • Bashスクリプトに関するシステム管理者ガイド
  • 最新のBash記事

Bashによるとhelp source コマンドは、現在のシェルでファイルを実行します。 「現在のシェル内」という句は、サブシェルを起動しないことを意味するため、重要です。したがって、 sourceで実行するものは何でも 現在内で発生し、影響します 環境。

sourceの方法を調べる前に 環境に影響を与える可能性がある場合は、 sourceを試してください テストファイルで、期待どおりにコードが実行されることを確認します。まず、簡単なBashスクリプトを作成し、 hello.shというファイルとして保存します。 :

#!/usr/bin/env bash
echo "hello world"

sourceを使用する 、実行可能ビットを設定しなくても、このスクリプトを実行できます:

$ source hello.sh
hello world

組み込みのを使用することもできます 同じ結果を得るコマンド:

$ . hello.sh
hello world

ソース および コマンドはテストファイルの内容を正常に実行します。

変数を設定して関数をインポートする

sourceを使用できます include を使用するのと同じように、ファイルをシェル環境に「インポート」します。 ライブラリまたはimportを参照するためのCまたはC++のキーワード モジュールを取り込むためのPythonのキーワード。これは、 sourceの最も一般的な使用法の1つです。 、これは .bashrcに含まれる一般的なデフォルトです。 sourceへのファイル .bash_aliasesというファイル ログイン時に、定義したカスタムエイリアスが環境にインポートされるようにします。

Bash関数をインポートする例を次に示します。まず、 myfunctionsというファイルに関数を作成します 。これにより、パブリックIPアドレスとローカルIPアドレスが出力されます:

function myip() {
        curl http://icanhazip.com      

        ip addr | grep inet$IP | \
        cut -d"/" -f 1 | \
        grep -v 127\.0 | \
        grep -v \:\:1 | \
        awk '{$1=$1};1'
}

関数をシェルにインポートします:

$ source myfunctions

新しい機能をテストします:

$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38
ソースを検索

sourceを使用する場合 Bashでは、現在のディレクトリで参照しているファイルを検索します。これはすべてのシェルで発生するわけではないため、Bashを使用していない場合はドキュメントを確認してください。

実行するファイルが見つからない場合、Bashは PATHを検索します 代わりは。繰り返しになりますが、これはすべてのシェルのデフォルトではないため、Bashを使用していない場合はドキュメントを確認してください。

これらは両方ともBashの便利な機能です。この動作は、一般的な機能をドライブの中央の場所に保存し、環境を統合開発環境(IDE)のように扱うことができるため、驚くほど強力です。関数がローカルで同等の/usr / include にあることがわかっているので、関数がどこに格納されているかを心配する必要はありません。 、したがって、それらを調達するときにどこにいても、Bashはそれらを見つけます。

たとえば、〜/ .local / includeというディレクトリを作成できます。 一般的な関数のストレージ領域として、このコードブロックを .bashrcに配置します ファイル:

for i in $HOME/.local/include/*;
  do source $i
done

これにより、〜/ .local / includeにカスタム関数を含むすべてのファイルが「インポート」されます。 シェル環境に。

Bashは、現在のディレクトリと PATHの両方を検索する唯一のシェルです。 sourceのいずれかを使用する場合 または コマンド。

オープンソースにソースを使用する

sourceを使用する または ファイルを実行することは、変更をモジュール化したまま、環境に影響を与える便利な方法です。次回、コードの大きなブロックをコピーして .bashrcに貼り付けることを考えているとき ファイルを作成し、関連する関数またはエイリアスのグループを専用ファイルに配置してから、 sourceを使用することを検討してください。 それらを摂取する。


Linux
  1. Linuxlogrotateコマンドを使用してログをローテーションおよびアーカイブします

  2. Linuxのwatchコマンドでコマンドとタスクを監視する

  3. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  1. pushdとpopdを使用してBashシェルをナビゲートする

  2. Bashの「評価」コマンド?

  3. Bashに入力されたすべてのコマンドとすべてのファイル操作をログに記録する方法は?

  1. xclipを使用してLinuxコマンドラインでコピーして貼り付けます

  2. シェル変数の関数?

  3. bash履歴を使用して前のコマンドを取得し、それをコピーしてから「実行」しますが、コマンドはコメント化されています