Macos 为什么可以';我不能执行这个简单的shell脚本吗?
我有一个文件叫“进去”~/ 我想做的就是能够运行go并将它cd到另一个目录 这是go文件的外观:Macos 为什么可以';我不能执行这个简单的shell脚本吗?,macos,bash,shell,Macos,Bash,Shell,我有一个文件叫“进去”~/ 我想做的就是能够运行go并将它cd到另一个目录 这是go文件的外观: $ cat go #!/bin/bash cd ~/Desktop/rs3 我运行了$chmod+xgo行 然后是行./go以尝试运行该文件 如果我在文件中放入echo which,它会将任何内容打印到控制台,但cd命令永远不会工作 谢谢。因为脚本在子shell中运行,所以环境不同,所以无法工作 您可以做的是alias go='cd~/Desktop/3s3'——由于它是一个别名,shell将执行
$ cat go
#!/bin/bash
cd ~/Desktop/rs3
我运行了$chmod+xgo行
然后是行./go以尝试运行该文件
如果我在文件中放入echo which,它会将任何内容打印到控制台,但cd命令永远不会工作
谢谢。因为脚本在子shell中运行,所以环境不同,所以无法工作 您可以做的是
alias go='cd~/Desktop/3s3'
——由于它是一个别名
,shell将执行替换并在自身上运行cd
,就像您刚刚键入它一样
您应该在您的
~/.bashrc
,~/.bash\u配置文件
或登录时获取源代码
d的任何文件中定义别名。@StuartGolodetz很酷,这很好地回答了问题,谢谢!可惜我看了两个小时的教程都没有告诉我这些。@sherlock:你仍然可以运行~/转到
进行更改directory@anubhava是的,谢谢脚本中的cd
命令确实有效。它只适用于运行脚本的进程,而不适用于其父进程(交互式shell)。您可以使用
在当前shell的上下文中运行脚本(在这种情况下,脚本可能不应该是可执行的,也不应该有#!/bin/bash
行),或者您可以修改脚本以将cd
命令打印为标准输出,然后执行该命令:eval$(~/go)
在后一种情况下(eval$(~/go)
),如果它打印多个命令,它们应该用分号分隔,因为$(cmd)
将cmd
的输出合并到一行中。