gpt4 book ai didi

linux - 在 cd 后执行 ls 的脚本

转载 作者:太空狗 更新时间:2023-10-29 12:22:46 25 4
gpt4 key购买 nike

我正在尝试制作一个 bash 脚本,每次执行 cd 命令时,我都会获得新文件夹 (ls) 的文件和文件夹列表。

我找到了下一个 bash 函数:

#!/bin/bash

cs() { cd "$@" && ls; }

我保存了它:~/.scripts/cs。这奏效了。我将它添加到我的 PATH 中,在 .bash_profile 中:

PATH=$PATH:$HOME/.scripts
export PATH

当我像 一样执行它时。 .scripts/cs 它可以工作,但是当我在另一个窗口时什么也没有发生。我认为我需要在脚本中调用该函数,所以我修改了它:

#!/bin/bash

cs() { cd "$@" && ls; }

cs

现在,当我在其他窗口中执行 cs 时,我只会得到正确的 ls 命令,但它不会更改目录。

根据我所读的内容,我的结论是 cs 命令是在“子 shell”中执行的,而 cd 命令是在那里执行的,而在我当前的 shell 中我只收到 ls。我尝试在我的 .bashrc 文件中做一个别名:

alias cs='. cs'

但老实说,我不知道会发生什么,我只收到以下错误:

bash: /home/ggf/.scripts/cs: line 4: syntax error near unexpected token `('
bash: /home/ggf/.scripts/cs: line 4: `cs() { cd "$@" && ls; }'

有什么解决方案或建议吗?抱歉我的英语不好,我来自阿根廷。最后一个错误也有解决方案吗?我认为这对其他场合会有用。

最佳答案

随便放

cs() { cd "$@" && ls; }

在你的 .bashrc 中。跳过脚本文件、别名等。请注意,您必须打开一个新终端才能获得干净的 shell ,否则它会记住别名并尝试继续使用它。

解释为什么它几乎必须放在​​ .bashrc 中:如果您将它放在 PATH 中的单独文件中,那么默认情况下它将在子进程中运行;它所做的更改(包括更改目录、定义函数和别名等)将是该子进程的本地更改。有一些方法可以避免这种情况,但它们都涉及额外的输入,或者对 .bashrc(或其他一些 shell 启动文件)进行更改:

  • 您可以使用 .source 运行该文件,这需要在您每次使用该函数时进行额外的输入。 (注意:在这种情况下,您不会使用函数,只需让文件直接执行 cd "$@"&& ls。)
  • 您可以为 .source 文件创建一个别名,但随后您必须修改 .bashrc 以包含该别名定义。
  • 您可以将函数(或别名)定义放在一个文件中,然后使用 .source 加载它,但这需要在您每次打开 shell 时进行额外的输入.
  • 您可以通过在 .bashrc 中使用 .source 来自动执行此操作,但现在您正在修改 .bashrc,你也可以直接把定义放在那里。

    (异常(exception):有些人喜欢将他们的 shell 启动文件组织成例如一个别名定义文件、一个函数定义文件、另一个参数设置文件等...然后 source 那些来自 .bashrc 和/或其他 shell 启动文件。一些操作系统甚至带有默认的启动文件,开箱即用。如果你觉得这种组织有帮助,一定要使用它。)

顺便说一句,我有时会看到人们为这样的问题创建过于复杂的解决方案,比如使用别名来获取创建函数的文件……IMO,除非这种复杂性实际上在做一些有用的事情,否则就放弃它。在这种情况下,一个函数可以完成所需的一切,所以这就是您应该使用的全部内容。

关于linux - 在 cd 后执行 ls 的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54059171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com