私は私たちのチームが毎日行う特定の問題を解決するために、いくつかのユーティリティスクリプトを開発しました。
同僚のラップトップにスクリプトを配布するためにこれまでに行ったことは次のとおりです。
- 各ソリューションには
main.sh
スクリプト(他のスクリプトとサポートファイルを含む)があります。 - ユーザーのホームフォルダにフォルダを作成し、そこにファイルを配置します。
- Linuxディストリビューションに応じてエイリアスを追加するか、
.bashrc
スクリプトを.bash_aliases
指します。main.sh
- オートコンプリートファイルをコピーします
/etc/bash_completion.d/
(完成ファイル名はエイリアスに拡張子を加えたものと同じです.auto
)。 - マニュアルページをコピーして
/usr/share/man/man1/
gzipで圧縮します(manファイル名はエイリアスに拡張子を加えたものと同じです.1
)。
インストーラを作成したいのですが、エイリアス部分が面倒です。
- 自動化できるより良いオプション(インストールプログラム)はありますか?
/usr/local/bin
エイリアスを作成する代わりに、main.shファイルへのソフトリンクを入れることができますか?- これに関するベストプラクティスはありますか?
答え1
まあ、会社で働くことはそれほど難しくありません。内部に関数をシェル関数に入れます。たとえば、
fn(){
echo first time called\!
fn(){
echo not the first time called\!
}
}
fn; fn; fn
...印刷されます...
first time called!
not the first time called!
not the first time called!
関数、ソースファイルなどでシェルエイリアスを定義することもできます。美しいプロンプトで現在のシェル状態に関連する多くの操作を実行することもできます。とは別に位置パラメータに影響します。(これはesでも解決できますがalias
)。
だからできるインストールソースを考慮することをお勧めします。.fn.name
(何の関係なのか)ファイルを見つけて、rcファイルから1回呼び出します。ここで、関数への最初の呼び出しは、必要に応じてすべての独自の設定を処理し、その後のすべての呼び出しに対して独自に上書きされます。
または、一部のシェルの機能に似ています。自動ロード、次のようにrcファイルを読み込むたびに定義されている1行の関数を作成できます。
printf '%b' '[ -f ~/.fn_name ] &&\n\tfn_name(){ . ~/.fn_name; }\n' >>~/.bash.rc
...そして~/.fn_name
その中で
fn_name(){ : now redefine the function; }
...fn_name
最初の呼び出しの前にシェルの状態がほとんど使用されないため、混乱が少なく.bash.rc
簡単に管理できます。
しかし、~/.fn
これらのすべてのタイプを1つのファイルに入れ、デフォルトのrcからソースをインポートし、そこから各個々のものをインポートする方が簡単です。