私は物事を簡単にする機能を作成する予定です。関数は次のようになります
function lazymode()
{
echo "Hello World!";
}
Shellでlazymode
コマンドを使用すると、Hello World!
が出力されます。
ユーザー定義関数をどのファイルに配置する必要がありますか?
機能に依存します。それがそのような非常に単純なワンライナーである場合、エイリアスを作成するか、~/.bashrc
(bashが起動時にロードするファイル)に関数を貼り付けることができます。
もう少し肉付きの良いものを作成する場合は、~/bin/
に独自の実行可能スクリプトを作成する方が理にかなっているかもしれません。このため、ファイルは実行可能(chmod +x filename
)であり、適切な#!/bin/bash
スタンザで開始する必要があることに注意してください。
2番目のルートには、いくつかの明確な利点があります。
~/bin/
がそのシェルのパスにある限り(ほとんどの場合、これは既知のはずです)、すべてのシェルで使用できます。最良の選択は~/.bashrc
ファイルです。
シェル関数の定義を~/.bashrc
ファイルに直接書き込むか、~/.bashrc
ファイルがたくさんあり、乱雑にしたくない場合は、すべてを別のファイルに入れることができますあなたの選択-必ずソースを確認してくださいthat~/.bashrc
ファイルのファイル。たとえば、関数を含むファイルの名前がbash_functions
の場合、単に~/.bashrc
ファイルに次の行を追加します。
if [[ -f /path/to/bash_functions ]]; then
source /path/to/bash_functions
fi
または、同等に:
if [[ -f /path/to/bash_functions ]]; then
. /path/to/bash_functions
fi
ここで、.
はsource
の単なるシンボリック表現です。 if
テストは、ソースとなる前にファイル/path/to/bash_functions
が存在することを確認します。
この手法は、~/.bashrc
という名前のファイルを作成し、上記の~/.bash_aliases
の構文と同様の構文を使用して、その存在をテストしてからソースを取得することにより、~/.bashrc
でエイリアスを確立することに非常に似ています。
永続的な関数を宣言するための重要な手順は次のとおりです。
テキストエディタで~/.bashrc
ファイルを開きます。使用方法を知っていて、/home/<username>/.bashrc
を開いている限り、どのテキストエディターでもかまいません
~/.bashrc
の最後で、たとえば次のように独自の関数を宣言します。
find_dirs(){
find "$1" -type d
}
ファイルを保存して閉じます。
~/.bashrc
ファイルは、インタラクティブシェルを開くたびに読み込まれます(つまり、新しいターミナルタブ、ssh
経由でログイン、またはTTY1または他の仮想コンソールを開きます)。 ~/.bashrc
は非対話型シェルでは読み取られないため、これはスクリプトファイルでは使用できません。 --norc
オプションを指定してbash
を実行した場合も使用できません。
現在開いているタブで関数をすぐに使用可能にするには、source ~/.bashrc
コマンドを使用します。
関数は、通常のコマンドと同様に引数を取ります。たとえば、$1
〜$9
は、関数を呼び出すときの位置パラメーターを示します。上記の例では、find_dirs
は1つの定位置パラメーターのみを取り、find_dirs /etc
として呼び出されます。 $@
を使用して、すべての定位置パラメーターを参照することもできます。関数はリダイレクトも受け入れます。 find_dirs $1 > /dev/null
を使用して関数を呼び出すことができます。次のように宣言することもできます。
find_dirs(){
find "$1" -type d
}
man bash
からの注意:「関数は現在のシェルのコンテキストで実行されます。それらを解釈するための新しいプロセスは作成されません」。つまり、シェル実行環境を変更する機能を備えた関数(変数とターミナル設定の変更)にも注意する必要があります。