在Mac上执行bash和sh文件而不编写扩展名

时间:2015-11-26 09:41:57

标签: linux macos bash shell unix

我有一个.sh文件,我想从shell执行它而不编写扩展名。 我做了什么:

  • 我创建了一个目录并将其添加到$ PATH
  • 我给了file.sh chmod 711
  • 并且文件包含#!/ bin / sh(我也尝试过bash)。

然而,当我尝试在没有sh的情况下执行myscript时,我找不到命令 while 如果我尝试使用myscript.sh,我会得到正确的结果。

我该怎么办?

我还阅读:How to run a shell script on a Unix console or Mac terminal?executing shell script without calling sh implicitly,但没有解决方案

ls -l <​​/ strong>

的结果
ls -l /Users/Mitro/scripts
total 8
-rwx--x--x  1 Mitro  staff  22 Nov 26 10:25 myscript.sh

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/Mitro/scripts

3 个答案:

答案 0 :(得分:1)

两个问题......

首先,file已经是/usr/bin中的可执行程序,它告诉您文件的类型 - 即它是图像,还是歌曲或数据库。快速举例:

file a.png
a.png: PNG image data, 1 x 1, 1-bit colormap, non-interlaced

因此,file是shell脚本的错误名称 - 同样是test

其次,如果要在当前目录中执行脚本或程序,也称为点(.),则需要在PATH中使用点,或者需要明确告诉你的shell你要运行的文件在当前目录中。更简单的选项是第二个,这意味着如果您的脚本被调用fred,则使用

运行它
./fred

告诉shell它在你当前的目录中。

如果您希望始终能够在当前目录中运行脚本,则较长的选项是向PATH添加点。因此,您找到了您的登录脚本(可能是$ HOME / .profile),并找到了设置PATH的行,并将当前目录添加到其中。

export PATH=$PATH:.

设置完成后,最好退出并重新登录以使其生效。

有些人不赞成在他们的PATH中添加点的想法 - 我没有。 YMMV。

答案 1 :(得分:0)

您可以添加别名。如果你有/some/path/to/script.py,请执行:

alias my_script='/some/path/to/my_script.py'

现在当您输入my_script时,您的脚本将被执行。

答案 2 :(得分:0)

对于mac,配置文件是~/.bash_profile,而~/.profile则不起作用。