私は私のために物事を簡素化する関数を作成することを計画しています。関数は次のようになります
function lazymode()
{
echo "Hello World!";
}そのためlazymode、シェルでコマンドを使用すると、Hello World!。
ユーザー定義関数をどのファイルに配置する必要がありますか?
私は私のために物事を簡素化する関数を作成することを計画しています。関数は次のようになります
function lazymode()
{
echo "Hello World!";
}そのためlazymode、シェルでコマンドを使用すると、Hello World!。
ユーザー定義関数をどのファイルに配置する必要がありますか?
回答:
機能に依存します。それがそのような超単純なワンライナーである場合、エイリアスを作成するか、関数~/.bashrc(起動時にbashがロードするファイル)を貼り付けることができます。
もう少し肉付きの良いものを作成~/bin/する場合は、デフォルトでは存在せず(ディレクトリにすぎません)、パス内にあるはずの独自の実行可能スクリプトを作成する方が賢明かもしれません。このため、ファイルは実行可能(chmod +x filename)であり、適切な#!/bin/bashスタンザで開始する必要があることに注意してください。
2番目のルートにはいくつかの明確な利点があります。
~/bin/絶対パスが使用されているか、そのシェルのパスに含まれている限り、どのシェルでも使用できます(ほとんどの場合、これは不明です)。/usr/local/bin代わりにユーザースクリプトを使用するべきではありません$PATHか?
                    ~/.bashrc(sourcedのように)関数を配置することの小さいながら価値のある利点は、BashがPATHルックアップを行う前に関数を探すことです。
                    最良の選択は~/.bashrcファイルです。
あなたはどちらかあなたに直接お使いのシェル関数定義を書くことができ~/.bashrcますが、それらの多くを持っているし、あなたの乱雑にしたくない場合は、ファイル、または~/.bashrcすべてのあなたの選択した別のファイルにそれらを置くことができ、ファイルを-念源になることファイル内の~/.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してその存在をテストし、それをソースとしてエイリアスを確立することに非常に似ています。
~/.profileファイルは、ログインシェルのコマンドインタープリターによって実行されます。GUIを使用してターミナルを開くと、ログインしていないシェルに移動するため、そのファイルは実行されません。
                    永続関数を宣言するための重要な手順は次のとおりです。
~/.bashrcテキストエディタでファイルを開きます。どのテキストエディターを使用しても、使用方法がわかっていて、/home/<username>/.bashrc 
終わりには~/.bashrc、たとえば、独自の関数を宣言します。
find_dirs(){
    find "$1" -type d
}ファイルを保存して閉じます。
この~/.bashrcファイルは、対話型シェルを開くたびに読み込まれます(つまり、新しい端末タブ、ログインssh、またはTTY1またはその他の仮想コンソール)。これは~/.bashrc、非対話型シェルでは読み取られないため、スクリプトファイルでは使用できません。オプションで実行bashした場合も利用できません--norc。
現在開いているタブですぐに機能を使用できるようにするには、source ~/.bashrcコマンドを使用します。
関数は、通常のコマンドと同様に引数を取ります。たとえば、$1through $9は、関数を呼び出すときに位置パラメーターを示します。上記の例でfind_dirsは、1つの定位置パラメーターのみを取り、と呼ばれfind_dirs /etcます。を使用$@して、すべての定位置パラメーターを参照することもできます。関数はリダイレクトも受け入れます。関数を呼び出すにはfind_dirs $1 > /dev/null; 次のように宣言することもできます。
find_dirs(){
    find "$1" -type d
}注man bash:「関数は現在のシェルのコンテキストで実行されます。それらを解釈するための新しいプロセスは作成されません」。つまり、シェル実行環境を変更する機能を備えた関数(変数とターミナル設定の変更)にも注意する必要があります。