私はしばしば次のことをしていると思います。
%> cd bla/bla
%> ls
cd
自動的に実行するようにしたいと思いますls
。
しばらくこれを触ってみましたが、どのように.bashrc
実装するのかわかりません。
答え1
これを行うには、関数を使用できます。
$ cdls() { cd "$@" && ls; }
&&
「cd
ディレクトリに移動して成功した場合(たとえば、ディレクトリが存在する場合)を実行する」を意味しますls
。 2つの&&
コマンドの間には、セミコロン演算子よりも演算子を使用することをお勧めします。 2番目のコマンドは有効かどうかにかかわらず実行されます。これが失敗すると、現在のディレクトリの内容が印刷され、ユーザーに混乱を招く可能性があります。最良の方法は代わりに使用することです。;
{ cd "$@"; ls; }
ls
cd
cd
ls
&&
;
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
通常、すでに存在するコマンドの名前を変更することはお勧めできませんcd
。特に同じコマンドの場合は、別の名前で新しいコマンドを生成してください。cd
同じ名前の関数やエイリアスでそれをオーバーライドすると、cd
100,000個のファイルがあるディレクトリに入るとどうなりますか?多くのユーティリティが使用され、これらのcd
異常な動作のために混乱する可能性があります。共有アカウントを使用している場合(たとえば、root
他のシステム管理者と連携している場合など)、環境が予期したものと異なるため、既存のコマンドを置き換えるのは非常に危険です。
答え2
私の.bashrcにこれがあり、うまく動作します。
function cd {
builtin cd "$@" && ls -F
}
私の.bashrcの最初の部分には次のものがあります。その行以降のすべての内容は対話型セッションにのみ適用されるため、スクリプトがどのように機能するかには[ -z "$PS1" ] && return
影響しません。cd
答え3
話題から抜け出した質問には/bashタグが付けられていますが、bashに言及していないいくつかの質問のために、この質問が重複して終了したためです。
zshを使う:
chpwd() ls
chpwd()
この関数は、現在のディレクトリが変更されるたびに(cd、pushd、popd...この関数を参照)autocd
zshによって呼び出されます。 tcshは同様の機能を持ち、おそらくzshのソースです。
最新バージョンでは、zsh
他のフック機能と同様に、次のことができます。
my_chpwd_hook() ls
chpwd_functions+=( my_chpwd_hook )
現在の作業ディレクトリが変更されたときに、あなたまたはあなたが使用しているサードパーティ製のプラグインが別々の独立したタスクを実行する必要がある場合は、このアプローチをお勧めします。
答え4
.bashrcファイルにエイリアスを追加してみてはいかがですか?
それは次のとおりです。
alias cdls='cd "$@" && ls'