Shell脚本无法运行cd命令


15

我有一个基于文本的游戏Colossal Cave Adventure,我想使用Shell脚本启动而不是打开终端并输入cd ~/Desktop/CCAand ./Adventure。我尝试使用的代码是这样的:

#! /bin/bash
gnome-terminal -e 'cd ~/Desktop/CCA/; ./Adventure'

我收到的消息是这样的:

There was an error creating the child process for this terminal
Failed to execute child process `cd` (No such file or directory)

提供更改个人资料偏好设置或重新启动过程的选项。我还尝试使用绝对路径而不是~/,并且我的所有文件名均拼写正确并指向正确的位置。怎么了?

Answers:


16

cd 是内置的shell。您应该使用此:

#! /bin/bash
gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

谢谢,我不知道那cd不是命令。
Giaphage47

1
cd当然命令!正如Hastur的答案正确指出的那样,这就是所谓的shell内置命令。Shell内置命令通常简称为“ shell内置”或“ builtins”,但它们绝对是命令。什么是不是是一个外部命令。Ubuntu没有程序如果有,运行它仍然不会改变运行它的shell中的目录)。@ Giaphage47cdcd
Kagan

11

错误

Failed to execute child process "cd" (No such file or directory)

之所以会出现,是因为 cdSHELL BUILTIN COMMANDS不是您在硬盘上实际找到的可执行文件之一,而不是其可执行文件。

要运行它或built-in脚本中的其他命令,您需要将所有行传递给bash调用

 gnome-terminal -e '/bin/bash -c "cd ~/Desktop/CCA/; ./Adventure" '   

如果没有其他的内部命令,你必须执行,你可以设置工作目录gnome terminal,如只是简单地回答在这里

gnome-terminal --working-directory=/home/username/Desktop/CCA/ -e './Adventure'

烦人的:有一些替代方案:

如果您只是在航站楼中,则可以

  • 一个alias赞,
    alias Star_My_Game="cd ~/Desktop/CCA; ./Adventure "
    然后将其放入您.bashrc或您的中,~/.bash_aliases这样您就可以Start_My_Game在每个外壳中使用单个命令来运行(选择一个更简单/短的名称比Start_My_Game更舒适)。

  • 或您可以将其设为可执行文件(chmod u+x MYscript)并放入其中的脚本path(通常~/bin是个不错的选择)。

我想您可以在桌面上放置一个链接,以执行终端并修改启动行为。来自gnome帮助

  1. 选择编辑▸配置文件首选项▸标题和命令。

  2. 选中运行自定义命令而不是我的shell。

  3. 在文本框中,键入命令或所需的外壳。

  4. 该命令将完全按照您编写的方式传递到终端,包括您指定的所有参数。环境变量将从终端继承,因为它是终端的子进程。

    打开一个新的终端选项卡或窗口,以查看自定义外壳程序或命令的执行方式


但是关键是要从shell脚本启动,而不必打开终端窗口。
Giaphage47

如果您想从脚本启动就足够了alias(〜舒适)或〜/ bin目录中的脚本,而无需启动新终端
Hastur 2014年

答案已更新,以防万一您再次需要:可以通过,cd但需要将其传递给bash。给它一张支票:) –
Hastur 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.