制作我的第一个 bash 脚本,无法让 cd 命令“坚持”。

制作我的第一个 bash 脚本,无法让 cd 命令“坚持”。

对于我的第一个 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 -lgo /etc -ltr

相关内容