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