Linux cd后执行ls的脚本

Linux cd后执行ls的脚本,linux,bash,shell,Linux,Bash,Shell,我试图创建一个bash脚本,每次执行cd命令时,我都会得到新文件夹的文件和文件夹列表(ls) 我找到了下一个bash函数: #!/bin/bash cs() { cd "$@" && ls; } 我保存了它:~/.scripts/cs。这起作用了。我将它添加到我的路径中。bash\u profile: PATH=$PATH:$HOME/.scripts export PATH 当我像那样执行它时。scripts/cs它可以工作,但当我在另一个窗口中时,什么都不会发生。我想我

我试图创建一个bash脚本,每次执行
cd
命令时,我都会得到新文件夹的文件和文件夹列表(
ls

我找到了下一个bash函数:

#!/bin/bash

cs() { cd "$@" && ls; }
我保存了它:
~/.scripts/cs
。这起作用了。我将它添加到我的
路径中
。bash\u profile

PATH=$PATH:$HOME/.scripts
export PATH
当我像
那样执行它时。scripts/cs
它可以工作,但当我在另一个窗口中时,什么都不会发生。我想我需要在脚本中调用函数,所以我修改了它:

#!/bin/bash

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

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

通过阅读,我的结论是cs命令在“subshell”中执行,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:如果您将它放在
路径中的一个单独文件中,那么默认情况下,它将在子流程中运行;它所做的更改(包括更改目录、定义函数和别名等)将是该子流程的本地更改。有一些方法可以避免这种情况,但它们都涉及额外的键入,或者对
.bashrc
(或其他一些shell启动文件)进行更改:

  • 您可以使用
    源代码运行该文件,每次使用该函数时都需要额外键入。(注意:在这种情况下,您不会使用函数,只需直接执行文件
    cd“$@”和&ls
  • 您可以为文件
    源文件
    创建别名,但必须修改
    .bashrc
    以包含该别名定义
  • 您可以将函数(或别名)定义放在文件中,并使用
    源文件加载该定义,但这需要在每次打开shell时额外键入
  • 您可以通过在
    .bashrc
    中使用
    源代码实现自动化,但现在您正在修改.bashrc,您最好直接将定义放在那里

    (例外:有些人喜欢将其shell启动文件组织为别名定义文件、函数定义文件、参数设置文件等,然后是
    源文件
    源文件
    和/或其他shell启动文件。有些操作系统甚至附带了默认启动文件,支持这种开箱即用。如果你觉得这种组织很有帮助,一定要使用它。)


顺便说一句,我有时会看到人们为这样的问题创建了过于复杂的解决方案,比如有一个别名来生成一个创建函数的文件……除非这种复杂性实际上是在做一些有用的事情,否则就丢掉它。在这种情况下,函数可以做所有需要做的事情,所以这就是你应该使用的。

只需放置
cs(){cd“$@”&&ls;}
在您的
.bashrc
中。跳过脚本文件、别名等。请注意,您必须打开一个新的终端才能获得一个干净的外壳,否则它将记住别名并尝试继续使用。这非常好!然后我被迫将其保留在。bashrc?没有办法将其分离到另一个文件中?只是好奇,您可以将其放入(可能还有其他一些函数/别名定义)在另一个文件中,以及来自
.bashrc
source
,但是您仍然必须在
.bashrc
中有一些内容才能将定义添加到您打开的每个新shell中。@GordonDavisson-为什么不将第一条注释作为一个答案呢?另请参见,(U&L.SE),(SO),(AskU),等等。