Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 为什么可以';我不能执行这个简单的shell脚本吗?_Macos_Bash_Shell - Fatal编程技术网

Macos 为什么可以';我不能执行这个简单的shell脚本吗?

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将执行

我有一个文件叫“进去”~/

我想做的就是能够运行go并将它cd到另一个目录

这是go文件的外观:

$ 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
的输出合并到一行中。