Answers:
您可以使用以下功能执行此操作:
$ cdls() { cd "$@" && ls; }
的&&意思是“ cd到一个目录下,如果成功(例如目录存在),运行ls”。像一样,使用&&运算符要好;于在两个命令之间使用分号运算符{ 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与其他系统管理员一起使用时),则替换现有命令可能非常危险,因为环境与人们期望的环境不同。
pwd。不知道这是否是最佳做法,但通常会这样做。有关某些示例,请参见tldp.org/LDP/abs/html/aliases.html。
cd() { builtin cd "$@" && pwd; };-在macOS(Sierra 10.12.6)上使用标准bourne shell
我在我的.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
每当当前目录更改时(通过cd,push,popd ...),zsh都会调用chpwd()函数。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" } 。
更方便-具有追溯历史的能力:
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输出。要返回目录历史,只需弹出以下命令: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