私は私のために物事を簡素化する関数を作成することを計画しています。関数は次のようになります
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
(source
dのように)関数を配置することの小さいながら価値のある利点は、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
コマンドを使用します。
関数は、通常のコマンドと同様に引数を取ります。たとえば、$1
through $9
は、関数を呼び出すときに位置パラメーターを示します。上記の例でfind_dirs
は、1つの定位置パラメーターのみを取り、と呼ばれfind_dirs /etc
ます。を使用$@
して、すべての定位置パラメーターを参照することもできます。関数はリダイレクトも受け入れます。関数を呼び出すにはfind_dirs $1 > /dev/null
; 次のように宣言することもできます。
find_dirs(){
find "$1" -type d
}
注man bash
:「関数は現在のシェルのコンテキストで実行されます。それらを解釈するための新しいプロセスは作成されません」。つまり、シェル実行環境を変更する機能を備えた関数(変数とターミナル設定の変更)にも注意する必要があります。