私はしばしば次のことをすることがわかりました。
%> cd bla/bla
%> ls
cd
をディレクトリに入れると、自動的にls
が実行されるようにしてください。
しばらく.bashrc
をいじっていましたが、どうすれば実現できるのかわかりませんでした。
これは関数で行うことができます:
$ cdls() { cd "$@" && ls; }
&&
は 'cd
をディレクトリに変換し、成功した場合(たとえば、ディレクトリが存在する場合)ls
'を実行します。 &&
のように、2つのコマンドの間にセミコロン;
演算子を使用するよりも、{ cd "$@" ; ls; }
演算子を使用する方が適切です。この2番目のコマンドは、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
など、他のシステム管理者と共同で作業している場合)を使用する場合、環境が予想と異なるため、既存のコマンドを置き換えるのは非常に危険です。
私はこれを.bashrcに入れており、正常に動作します。
function cd {
builtin cd "$@" && ls -F
}
私の.bashrcの前のほうで:[ -z "$PS1" ] && return
、およびその行以降はすべてインタラクティブセッションにのみ適用されるため、これはスクリプトでのcd
の動作には影響しません。
質問は/ bashとタグ付けされているのでトピック外ですが、bashについて言及していないいくつかの質問はこの質問の複製として閉じられています。
Zshの場合:
chpwd() ls
Chpwd()関数は、現在のディレクトリが(cd、pushd、popd ...によって)変更されるたびにzshによって呼び出されます。 tcshにも同様の機能があり、おそらくzshがそれを取得した場所です。
.bashrcファイルにエイリアスを追加してみませんか?
何かのようなもの:
alias cdls='cd "$@" && ls'
これをコピー:
altercd(){ cd(){ unset -f cd ; cd $*; ls ; altercd; } } ; altercd
これで、単純なcdを実行できます。
cd /
(files listed)
cd /home
(files listed)
etc...
Cdコマンドのエイリアスを作成する一般的な解決策は、popdのように現在のディレクトリを変更したり、cdコマンドを含むスクリプトを実行したりできる他のコマンドがあるため、完全ではありません。
プロンプトを返す前にコマンドを実行する$ Prompt_COMMAND Bashフックを使用することをお勧めします。
コマンド(この場合は関数)は、画面のノイズを減らすためにディレクトリが変更された場合にのみlsを実行します。 .bashrcのコード:
#each console has its own file to save PWD
PrevDir=$(tty)
PrevDir=/tmp/prev-dir${PrevDir////-}
#don't ls when Shell launched
echo $PWD > $PrevDir
LsAfterCd() {
[[ "$(< $PrevDir)" == "$PWD" ]] && return 0
ll --color=always | sed 1d
echo $PWD > $PrevDir
}
Prompt_COMMAND=LsAfterCd
Bashでは、パラメーターを必要とするアクションのエイリアスに繰り返しアクセスすることはできません。このための機能があります。だからあなたの~/.bashrc
以下
mycd() {
cd "$1"
ls
}
以下のコードを.profileに配置すると機能します。 HP-Unixボックスでテスト済み。
cdl()
{
if [ "$#" = 0 ]; then
cd ~ && ls -ltr
Elif [ -d "$@" ]; then
cd "$@" && ls -ltr
else
echo "$@" directory not found!!!
fi
}
#SET YOUR ALIAS TO CD
alias cd="cdl"
ls
はオプションを取らないので、このようにcd
のオプションを有効にするとよいと思います。
cdls() {
cd ${$#} && ls ${@:0:$#-1}
}
さらに便利-履歴に戻る機能があります:
_function cd() {
if [ -d "$@" ]; then
echo -n "Stack: "
pushd "$@"
ls
else
builtin cd "$@"
fi
}
function popd() {
builtin popd "$@" && ls
}
_
ディレクトリを変更すると、次の行が表示されます:Stack: (current_dir) (previous_dir) ...
次に、ls
が出力されます。 dirs履歴に戻るには、次のコマンドをポップするだけです:popd
。
else
を追加したので、間違ったディレクトリに移動しようとするとエラーが表示されます。
これが私が(Debian 9で)便利だと思うものです:
c() {
cd "${@}" \
&& ls --color=always -C \
| sed '
# on line 5, print the line,
5 {
# append an Ellipsis
a[...]
# and quit
q
}
# print lines 1-4 verbatim
'
}
これにより、ディレクトリに項目が多すぎる場合に省略記号が付いた出力が省略され、コンソールがきれいに保たれます。
$ c data/git/buildroot/package/
4th lua-markdown
a10disp lua-messagepack
acl lua-msgpack-native
acpica luaossl
acpid lua-periphery
[...]
$ ls -1 | wc --lines
1977