1

私のソフトウェアの要件である「cd」コマンドを変更する bash 用のビルトインを作成しました。bash 自体とは別に、ロード可能なものを実際に配布する方法はありますか? ソースコードからシェルにパッチを当ててコンパイルすることで人々が先延ばしになる可能性があることを知っているので、理想的には「追加機能」を少しだけ配布したいと思います。

ユーザーがディレクトリにいる時間を計って、ユーザーがどこにいたいかを判断できるようにします。それはこの機能です: http://github.com/joelthelion/autojump/tree/masterは、パフォーマンスの問題のために bash 組み込みとして書き直されました。この実装は$PROMPT_COMMAND機能していましたが、統合されたものが欲しかったのです。

4

2 に答える 2

3

何を変更したかは不明ですが、いずれにせよbash(少なくともksh93どの IIRC が概念を導入し、zsh) サポートし、enable -f file name構文を使用して、組み込み関数を外部の動的にロードされたモジュールとしてロードします。

プレーン ファイルであるこれらのモジュールは、対象のバージョン/アーキテクチャと互換性があることを確認している限り、独立して配布できます。あなたがこの質問をしたとき、これは5年前にすでに真実でした。

cdあなたの場合の1つの問題は、前者にアクセスする機能を維持しながら、動的にロードされたものなど、内部組み込みをオーバーロードする文書化された方法がないように見えることです。

簡単な回避策は、次のように、カスタマイズした cd を別の名前 (mycd など) で実装することです。

int mycd_builtin(list)
WORD_LIST *list;
{
  int rv;
  rv=cd_builtin(list);
  if(rv == EXECUTION_SUCCESS) {
    char wd[PATH_MAX+1];
    getcwd(wd,sizeof(wd));
    // do your custom stuff knowing the new working directory
    ...
  }
  return (rv);
}

次に、通常のバージョンの代わりにカスタマイズされたバージョンのシェル関数を使用するには、次のようにします。

cd() {
  mycd "$@"
}

カスタマイズが標準コマンドの動作に影響を与えず、標準コマンドを使用するスクリプトを壊す危険がない限り、アプローチに問題はありません。

于 2013-09-21T13:06:40.713 に答える
2

内蔵CDを変更することは、管理者にとってはサポートの悪夢であり、外国人ユーザーにとっては歓迎されません。'smart-cd'という名前を付け、.bashrcまたは.profileに含めることで、機能が必要かどうかをユーザーに判断させることの何が問題になっていますか?その後、彼らは好きなように物事をセットアップすることができます。

また、ディレクトリにいる時間を使用することは、好みを示すのにかなり不十分です。アイドリング(/ tmpに一晩ぶら下がっている忘れられたシェル)、長時間実行されるスクリプト(毎晩のcronジョブ)、および実際のアクティビティをどのように区別しますか。

お気に入りのディレクトリへのショートカットを作成する方法は他にもたくさんあります。エイリアス、ソフトリンク、$ VARIABLES、スクリプトです。あなたの使用パターンがあなたのシステムの他のユーザーによって歓迎されると仮定することはあなたの傲慢です。

于 2009-03-15T02:50:22.340 に答える