多命令别名进入 bash shell 但无法导航到路径

多命令别名进入 bash shell 但无法导航到路径

我定义了这个别名来运行 bash 然后导航到某个文件夹,但是当我运行它时,它只运行 bash 并停留在当前路径/目录/文件夹中。

我在 ~/.bashrc 中以两种不同的方式定义了它们,但两种方法都无法导航到特定文件夹。

定义 #1

alias setup_ROR="bash; cd /users/nikeelevet/code/rails;" 

定义 #2

function setup_ROR() { 
        bash 
        cd /users/nikeelevet/code/rails 
}

知道为什么 CD 无法工作吗?

谢谢!

答案1

它们都会打开一个新的 shell,等待它关闭,然后更改目录。 这两个问题都可以通过不尝试运行 bash 来解决。

答案2

为什么不只是:

alias setup_ROR="cd /users/nikeelevet/code/rails" 

function setup_ROR() { 
        cd /users/nikeelevet/code/rails 
}

如果它在你的 bashrc 中,那么当运行别名时你已经在 bash shell 中了,为什么要运行另一个 bash?

答案3

别名已生效。如果您尝试以下操作:

~$alias test='ls;ls;'

然后运行命令测试

~$test

您将看到命令“ls”运行了两次。您无法导航到文件夹的原因是,当它第一次执行命令“bash”时,系统将启动一个 bash,它会等待您的输入,直到您输入“exit”才会返回。我认为如果您运行 setup_ROR,然后输入“exit”,您将导航到您的目录。

我不明白你为什么要在别名中运行“bash”。

答案4

所以您要做的就是用特定的当前目录启动一个新 shell,对吗?

事实上,当前工作目录是新进程继承的内容之一。因此这应该适合您的目的:

setup_ROR() {
    ( cd /users/nikeelevet/code/rails ; bash
}

括号导致两个命令在子 shell 中执行,因此cd不会影响您当前的 shell(当您退出子 shell 时会看到)。

相关内容