回答:
あなたは関数でこれを行うことができます:
$ 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
他のシステム管理者と作業しているときなど)、環境は人々の期待とは異なるため、既存のコマンドを置き換えるのは非常に危険です。
pwd
。これがベストプラクティスであるかどうかはわかりませんが、一般的に行われています。いくつかの例については、tldp.org / LDP / abs / html / aliases.htmlを参照してください。
cd() { builtin cd "$@" && pwd; };
- MacOSの(シエラ10.12.6)で、標準のBourneシェルを使用して
.bashrcにこれがあり、正常に動作します。
function cd {
builtin cd "$@" && ls -F
}
以前の.bashrcには[ -z "$PS1" ] && return
、があり、その行以降はすべて対話型セッションにのみ適用されるため、これはcd
スクリプトでの動作に影響しません。
[ -z "$PS1" ] && return
ますか?
[ -z "$PS1" ]
$PS
(対話式プロンプト変数)が「長さゼロ」(-z)かどうかを確認します。長さがゼロの場合、これは設定されていないことを意味するため、Bashを対話モードで実行しないでください。&& return
一部には、調達から出て.bashrc
、これらの条件の下で、この時点で。
i
です"$-"
:case "$-" in *i*) ;; *) return ;; esac
。
PS1
変数は設定されていないか空である可能性があり、シェルは引き続き対話的である場合があります(ただし、プロンプトは表示されません)。確認$-
するためにチェックします。
質問は/ bashとタグ付けされていますが、bashに言及していないこの質問の複製としていくつかの質問が閉じられているため、トピック外です。
zshの場合:
chpwd() ls
chpwd()関数は、現在のディレクトリが変更されるたびにzshによって呼び出されます(cd、pushd、popdなど)。tcshにも同様の機能があり、おそらくzshが入手した場所です。
エイリアスを.bashrcファイルに追加してみませんか?
何かのようなもの:
alias cdls='cd "$@" && ls'
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
これをコピー:
altercd(){ cd(){ unset -f cd ; cd $*; ls ; altercd; } } ; altercd
これで、簡単なcdを実行できます。
cd /
(files listed)
cd /home
(files listed)
etc...
bashでは、パラメーターを必要とするアクションのエイリアスに再帰することはできません。このための機能があります。だからあなた~/.bashrc
の次の
mycd() {
cd "$1"
ls
}
function mycd { builtin cd "$1" && ls "$2" }
。
.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"
さらに便利- 歴史に戻ることができます:
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