我有一个.sh
文件,我想从shell执行它而不编写扩展名。
我做了什么:
然而,当我尝试在没有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
答案 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
则不起作用。