Ubuntu认为bash脚本是perl

Ubuntu认为bash脚本是perl,bash,perl,ubuntu,Bash,Perl,Ubuntu,将以下代码保存到文件中,Ubuntu 14.04正确地认识到它是bash: #!/usr/bin/env bash awk '{print $1 $2}' my_file 但是,向awk添加关于输出格式的指令非常简单: #!/usr/bin/env bash awk 'BEGIN {ORS=" "} {print $1 $2}' my_file Ubuntu现在认为这是Perl,从文件属性和gedit如何格式化代码中可以看出。到底发生了什么事?(我真正关心的是一段比这个玩具示例长得多的b

将以下代码保存到文件中,Ubuntu 14.04正确地认识到它是bash:

#!/usr/bin/env bash

awk '{print $1 $2}' my_file
但是,向awk添加关于输出格式的指令非常简单:

#!/usr/bin/env bash

awk 'BEGIN {ORS=" "} {print $1 $2}' my_file
Ubuntu现在认为这是Perl,从文件属性和gedit如何格式化代码中可以看出。到底发生了什么事?(我真正关心的是一段比这个玩具示例长得多的bash代码。)

编辑:
用扩展名保存它。
.bash
愚弄了Nautilus…

你试过使用静态shebang吗

#!/bin/bash
shebang的
env
版本更灵活,但它可能会阻碍某些程序(如
gedit

但是,这不是O.s.问题:如果您尝试此命令:

$ file myscript
myscript: a /usr/bin/env bash script text executable
而且
vim
正确地显示语法

所以问题可能就在于gedit…:-(

更新: 通过与OP的聊天,问题在于脚本的名称(
script.bash
)。

将其更改为
script.sh
解决了这个问题。

是否尝试使用静态shebang

#!/bin/bash
shebang的
env
版本更灵活,但它可能会阻碍某些程序(如
gedit

但是,这不是O.s.问题:如果您尝试此命令:

$ file myscript
myscript: a /usr/bin/env bash script text executable
而且
vim
正确地显示语法

所以问题可能就在于gedit…:-(

更新: 通过与OP的聊天,问题在于脚本的名称(
script.bash
)。

将其更改为
script.sh
解决了这个问题。

这是gedit的问题,而不是ubuntu的问题。如果您执行该命令,系统将正确地将其视为bash,因为您告诉它在#!中使用bash。唯一的问题是您的编辑器混淆了语法。在某些编辑器中,您只需告诉它对文件使用哪种语法突出显示即可fused about。如果gedit不允许您更改,请寻找一个可以执行此操作的编辑器。这是关于文档使用了什么语法突出显示文件,仅此而已。请尝试其他代码编辑器,看看是否存在相同的问题。这是gedit的问题,而不是ubuntu的问题。如果执行此操作,系统将正确地将其视为bash,因为告诉它在#!中使用bash。唯一的问题是编辑器混淆了语法。在某些编辑器中,您可以告诉它对混淆的文件使用哪种语法突出显示。如果gedit不允许您更改,请找一个能做这项工作的编辑器。这是关于文档使用哪种语法突出显示文件,没有任何问题g更多。请尝试另一个代码编辑器,看看它是否有相同的问题。谢谢,shebang没有任何区别;我还发现
file
命令认为它是bash,但右键单击文件并选择属性,键入的是“Perl脚本(application/x-Perl)”“.这与gedit无关,对吗?对。但您使用的是哪种文件管理器?这可能是您的责任…即使这很奇怪…也可能是某些程序(
gedit
file-manager-x
,…)不要使用shebang来确定文件类型,而是使用内部euristic算法…而您的程序,因为只短一行,并且只包含awk代码,它使用类似perl的语法,可能会混淆这些算法…我想,当使用一些shell构造时,较长的bash程序不会出现这种情况…:-)我不知道-只是默认的Ubuntu文件查看-谷歌搜索一下,这意味着Nautilus?是的,Nautilus目前是默认的Ubuntu桌面文件管理器。尝试在脚本中添加更多行…;-)一个充满有趣bash语法的千行bash脚本也有同样的问题——为了这个示例,我将它简化为一行。但我刚刚发现,至少我可以通过查看>突出显示模式告诉gedit这不是它(和Nautilus)认为的语言;我还发现
file
命令认为它是bash,但右键单击文件并选择属性,键入“perlscript(application/x-Perl)”。那跟gedit没关系对吧?对。但是您使用的是哪种文件管理器?这可能是我的责任。。。即使这很奇怪。。。可能有些程序(
gedit
file-manager-x
,…)不使用shebang来确定文件类型,而是使用内部euristic算法。。。您的程序只短一行,并且只包含awk代码,它使用类似perl的语法,可能会混淆这些算法。。。我想当使用一些shell构造时,较长的bash程序不会出现这种情况…:-)我不知道——只是默认的Ubuntu文件查看——谷歌搜索一下,这意味着Nautilus?是的,Nautilus目前是默认的Ubuntu桌面文件管理器。尝试在脚本中添加更多行…;-)一个充满有趣bash语法的千行bash脚本也有同样的问题——为了这个示例,我将它简化为一行。但我刚刚发现,至少我可以通过查看>突出显示模式告诉gedit,这不是它(以及Nautilus)所认为的语言。