我想编写一个 bash scipt,它将更改为目标目录并列出新目录的内容,所有这些都一步完成。它将取代我经常连续使用的两个命令:
- cd ./some_directory
- ls-al
执行脚本后,我的当前目录将发生变化,并且 ls -al 将显示目录列表。
cdl ./some_directory
这可能吗?
答案1
您无法使用 shell 脚本执行此操作,因为脚本在新 shell 中运行,退出脚本会退出 shell 并“忘记”目录更改。看更改当前目录的脚本(cd、pwd)例如(网站上的某个地方可能有更详细的答案)。
您需要使用一个函数来代替:
cd1() {
cd "$@"
ls -al
}
答案2
另一种选择(在你的 .bashrc 中):
PROMPT_COMMAND='if [[ "$PWD" != "$_promptPWD" ]]; then ls -al; _promptPWD=$PWD; fi'
_promptPWD=$PWD
ls
如果您更改了目录,它会与 bash 的 PROMPT_COMMAND 功能挂钩,让它为您运行。缺点是:
- 需要修补到任何现有的 PROMPT_COMMAND(如果有)中
- 用另一个变量扰乱环境 (
_promptPWD
)
好处是您可以继续cd
正常输入,而不需要输入不同的内容来获得ls
行为。