对于我的第一个 bash 脚本,我想创建一些真正让我烦恼的事情:当我切换文件夹时,我希望该文件夹的内容自动显示出来。我尝试将以下代码添加到 ~/.bashrc:
alias go='cd; ls'
我以为这很简单!但事实并非如此。虽然键入go /etc
确实列出了 /etc 的内容,但我的工作目录实际上并没有改变,我仍然在之前所在的目录中。我该如何补救?
答案1
在您的示例中,go /etc
将执行cd; ls /etc
。这意味着,首先,cd
将当前目录更改为您的主目录。然后,ls /etc
将显示 的内容/etc
。
您可以通过定义一个函数来实现您想要的,如下所示:
function go() {
cd "$1" && ls
}
或者直接在命令行中输入:
function go() { cd "$1" && ls; }
然后go /etc
就会做你想做的事。
$1
在本例中, 表示传递给命令的第一个参数/etc
。 您可以使用 来引用后续参数$2
,$3
依此类推。
答案2
您可能希望将其与内置的 bash 目录堆栈 (dirs) 结合起来。这将使您有机会键入:go ...
,以查看堆栈中的前一个文件夹,而不是键入其名称。例如:
function go() {
if [ "$1" == "..." ]; then popd >/dev/null ; else pushd "$1" >/dev/null ; fi
ls $@
}
您可以...
用其他关键字替换,例如_back
. 一些不是目录名称的内容。
你会注意到,ls $@
这意味着所有剩余的参数都将传递给 ls。因此,如果你想要长列表或反向时间列表,请使用:
go /var -l
或
go /etc -ltr