私のようにこの質問をするのに10年かかる人はいません。 Linuxを起動したら、次のことを知りたいです。いつエイリアスを使用し、いつスクリプトを使用し、いつ関数を作成しますか?
エイリアスについては、パラメータを使用しない非常に簡単な操作にエイリアスを使用します。
alias houston='cd /home/username/.scripts/'
これは明らかなようです。しかし、一部の人々はそうします。
alias command="bash bashscriptname"
.bashrc
(そしてファイルに追加します)。
これには妥当な理由はありますか?私はこのような状況に遭遇しませんでした。影響を及ぼす可能性がある極端な場合がある場合は、以下に回答してください。
ここがPATHにいくつかの項目を追加したところでchmod +x
、Linuxで長年の試行錯誤の末に出てきたもう一つの項目です。
その後、次のトピックに進みます。たとえば、.scripts/
()に行を追加してホームディレクトリの隠しフォルダ()をPATHに追加すると、その中のすべての実行可能ファイルが自動的に完成します。.bashrc
PATH=$PATH:/home/username/.scripts/
私にはあまり必要ありませんね?私はPythonのようなシェル以外の言語にのみこれを使用します。シェルなら、その中に関数を書くことができます.bashrc
。
funcname () {
somecommand -someARGS "$@"
}
私は何を逃したことがありませんか?
エイリアスを使用する必要がある場合、スクリプトを作成する場合、関数を作成する場合についてLinux初心者に何を伝えますか?
不明な場合は、この質問に答える人は3つのオプションをすべて活用すると仮定します。 3つ(エイリアス、スクリプト、関数)のうち1つのみを使用している場合、この質問は実際には適していません。
ベストアンサー1
他の答えは、個人的な好みに応じていくつかの滑らかな一般的なガイドラインを提供しますが、関連項目のほとんどを無視します。事実スクリプト、関数、または別名を決定するときは、この点を考慮する必要があります。
エイリアスと機能¹
- エイリアスと関数の内容全体がシェルのメモリに保存されます。
- これに対する自然な結果は、エイリアスと関数ですただ現在、シェルで使用されており、シェルから呼び出すことができる他のプログラム(テキストエディタ、スクリプト、または同じシェルのサブインスタンス)では使用されていません。
- エイリアスと関数は現在のシェルで実行されます。つまり、シェルの現在の環境で実行され、影響を与えます。 ² エイリアスや機能を実行するために個別のプロセスは必要ありません。
スクリプト
- シェルはスクリプトをメモリに保持しません。代わりに、必要に応じて保存されたファイルからスクリプトを読みます。検索でスクリプトを見つけると、多くの
$PATH
シェルは将来のルックアップ時間を節約するためにそのパス名のハッシュをメモリに保存しますが、これを$PATH
使用しない場合はスクリプトのメモリ領域の範囲です。 関数やエイリアスよりもスクリプトを呼び出す方法がたくさんあります。たとえば、インタプリタに引数として渡したり、
sh script
実行可能ファイルとして直接呼び出すことができます。この場合、#!/bin/sh
shebang行(たとえば)のインタプリタが実行のために呼び出されます。どちらの場合も、スクリプトはシェル環境とは別の独自の環境を持つ別々のインタプリタプロセスによって実行され、スクリプトは何らかの方法でシェル環境に影響を与えることはできません。実際、インタプリタシェルは呼び出しシェルと一致する必要さえありません。この方法で呼び出されたスクリプトは通常の実行可能ファイルのように見えるため、すべてのプログラムで使用できます。最後に、スクリプトの読み取りと実行は現在のシェル
.
または一部のシェルで使用できますsource
。この場合、スクリプトはメモリに保持されるのではなく、要求時に読み取る関数と非常によく似ています。
アプリケーション
上記を考慮して、何かをスクリプトにするのか、関数/別名にするのかに関するいくつかの一般的なガイドラインを思いつくことができます。
シェルに加えて、他のプログラムでそれを使用できる必要がありますか? その場合はスクリプトでなければなりません。
インタラクティブシェルでのみ使用しますか? 外部コマンド/スクリプトに影響を与えずにインタラクティブに実行するときは、多くのコマンドのデフォルトの動作を変更することが望ましいことがよくあります。この場合、シェルの「対話モード専用」rcファイル(
bash
この場合.bashrc
)に設定されている別名/関数を使用してください。シェル環境を変更する必要がありますか? 関数/エイリアスまたはソーススクリプトが可能なオプション。
定期的に使用する製品ですか? メモリに保存する方が効率的である可能性があるため、可能であれば関数/エイリアスとして作成してください。
代わりに、ほとんど使用しないのですか? このような場合は、不要なときにメモリを占有しておくことも役に立ちませんので、スクリプトで作ってみてください。
1関数とエイリアスの間にはいくつかの重要な違いがありますが、関数はエイリアスが実行できるすべての操作を実行できるため、一緒にグループ化されます。エイリアスはローカル変数を持つことができず、パラメータを処理できず、1行より長いものについては不便です。
² Unix システムで実行中の各プロセスには環境通常、デフォルトのロケールや指定された実行可能検索パスなどのグローバルvariable=value
構成設定を含む複数のペアで構成されます。LANG
PATH