And*_*ili 5 command-line bash scripts environment-variables aptana-studio
我正在按照本教程在我的 Ubuntu 14.04 上正确执行 Aptana Studio:
所以我已经安装了 Oracle JRE,最后我创建了这个run.sh必须执行 Aptana 的文件:
!/bin/bash
export UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试使用我的 shell 执行此脚本时,我收到以下错误消息:
andrea@andrea-virtual-machine:~/Programmi/Aptana_Studio_3$ sudo sh run.sh
run.sh: 1: run.sh: !/bin/bash: not found
run.sh: 3: export: /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3: bad variable name
Run Code Online (Sandbox Code Playgroud)
为什么?我错过了什么?我该如何解决这个问题?
Eli*_*gan 11
有两个错误。简而言之,这是我建议的特定修复(详细信息如下):
#!/bin/sh
UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Run Code Online (Sandbox Code Playgroud)
正如Shutupsquare 所说,您的hashbang 系列(技术细节)应该以 a 开头,#!而不仅仅是!.
这会导致您的两个错误消息中的第一个,并且会阻止您的脚本作为 运行./run.sh,但这不是您的脚本无法运行的原因AptanaStudio3(因为sh run.sh调用语法不需要 hashbang 行)。
顺便说一句,当您运行时sh run.sh,它会sh以解释器的形式运行您的脚本。但是对于 hashbang line #!/bin/bash, running./run.sh将bash作为解释器运行您的脚本。此脚本不以任何方式依赖于 的高级功能bash,虽然bash对于此应用程序来说,额外的内存使用几乎可以肯定是微不足道的,但您可能仍然希望编写 hashbang 行,因此使用以下命令./run.sh运行脚本sh:
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
export导致您的第二条错误消息并且是AptanaStudio3无法运行的原因的主要问题是您使用export不正确。该export命令不运行命令。所以你的命令被解释为环境变量本身。
export 可以设置和导出环境变量:
export NAME=value
Run Code Online (Sandbox Code Playgroud)export 还可以导出环境变量(无论其当前值是什么):
export NAME
Run Code Online (Sandbox Code Playgroud)export但是,不接受NAME=value command或NAME command语法。
假设你的目标是要运行的命令/home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3与UBUNTU_MENUPROXY定义的变量,并设置为0,你刚才应该放弃这个词export干脆:
UBUNTU_MENUPROXY=0 /home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Run Code Online (Sandbox Code Playgroud)
这是从 shell 使用修改后的环境运行命令的标准方法。
的目的export是将变量导出到所有随后启动的子进程的环境中(即,从您的脚本运行的每个命令)。因此,正如Shutupsquare 建议的那样,export UBUNTU_MENUPROXY=0在自己的行上运行,然后是AptanaStudio3命令,将起作用,并具有相同的效果,并且是一种非常好的且可接受的方法。
我更喜欢我上面建议的方式(没有 export),因为:
export可能会给阅读您的脚本的其他人(或之后的您自己)造成混淆,并且作为次要考虑因素可以说不那么优雅。export,您需要两个命令;使用没有它的方式,你只需要一个。env命令的工作方式(某种程度上)与您尝试使用的方式相同export最后,是一个接受命令NAME=value command的语法。这个命令是env. 没有理由在这个 shell 脚本中使用它——它的功能,在基本用法中,是提供(部分)shell 在修改环境下运行命令的能力,而你已经拥有了这种能力。
但是,在某些情况下,在shell 脚本之外,您可能会发现需要为命令设置环境变量并运行该命令(并在单个命令中执行这些操作)。在VARIABLE=value command不支持仅使用该行的上下文中,您可以使用:
env VARIABLE=value command
Run Code Online (Sandbox Code Playgroud)
不过你在这里不需要那个。所有 Bourne 风格的 shell(例如sh, dash, bash, ksh, zsh)都支持VARIABLE=value command.
应该#!/bin/bash。我还认为你应该在 的末尾有一个换行符export UBUNTU_MENUPROXY=0。
#!/bin/bash
export UBUNTU_MENUPROXY=0
/home/andrea/Programmi/Aptana_Studio_3/AptanaStudio3
Run Code Online (Sandbox Code Playgroud)