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

Ram*_*Ram 11 command-line bash

对于我的第一个 bash 脚本,我想创建一些让我非常恼火的东西:当我切换文件夹时,我希望该文件夹的内容自动显示。我尝试将以下代码添加到 ~/.bashrc:

alias go='cd; ls'
Run Code Online (Sandbox Code Playgroud)

我想够简单了!不是这样。虽然键入go /etc确实列出了 /etc 的内容,但我的工作目录实际上并没有改变,我仍然在我以前所在的目录中。我该如何补救?

Tim*_*uck 29

在您的示例中,go /etc将执行cd; ls /etc. 这意味着,首先,cd将当前目录更改为您的主目录。然后,ls /etc将显示/etc.

你可以通过定义一个函数来实现你想要的,像这样:

function go() {
    cd "$1" && ls
}
Run Code Online (Sandbox Code Playgroud)

或者只是在命令行中的一行中键入它:

function go() { cd "$1" && ls; }
Run Code Online (Sandbox Code Playgroud)

然后go /etc会做你想做的。

$1在本例中指传递给命令的第一个参数/etc。您可以使用$2,$3等来引用后续参数。

  • +1。一项改进:只有在 `cd` 成功时才执行 `ls`:`go() { cd "$1" && ls; }` - 如果参数不存在,这将避免列出当前目录。 (3认同)
  • @user3471004 - 传递给 command 的第一个参数是 `$1` - 第二个参数是 `$2`,第三个参数是 `$3`,依此类推。`$@` 也可用于表示所有参数。可以找到各种示例 - 例如 [this](http://how-to.wikia.com/wiki/How_to_read_command_line_arguments_in_a_bash_script)。 (2认同)