我有一个像这样的bash脚本:
#!/bin/bash
echo Hello world!
如何在终端执行这段代码?
另一种执行它的方法(这次不需要设置执行权限):
bash /path/to/scriptname
/(your conda installation path)/bin/conda init zsh
),然后再次关闭和重新打开shell。 - S.Chauhan输入$prompt: /path/to/script
并按回车键。请注意,您需要确保脚本具有执行权限。
/path/to
目录下,例如使用 cd /path/to
命令进入了该目录,那么你可以输入 ./script
来运行脚本。在这种情况下,不要忘记在 'script' 前面加上 './'。 - FrViPofm进入包含脚本的目录,或者将脚本放到 $PATH 中的 bin 文件夹中。
然后输入:
./scriptname.sh
如果在同一个目录中或者
scriptname.sh
如果它在bin文件夹中。./scriptname.sh
对我有效,但 scriptname.sh
显示 scriptname.sh: command not found
。 -rwxr-xr-x
是它的权限。 - Spikatrix这是一个旧帖子,但我偶然看到它,惊讶于还没有人发表完整的答案。所以我就来解答一下...
下面是答案,但首先...如果你正在问这个问题,这里有一些其他信息可以帮助你:
ls
可能是内置命令,但大多数命令实际上都是单独的小程序。(这就是Unix的禅意的用处...“(i)让每个程序都做一件事情,并且做好这件事情。”)echo $PATH
以查看),则必须包含它。如果要从当前目录运行脚本,请在其前面使用./
。这个./
意思是“当前目录中的这里”。sudo
来执行任何操作。此命令保留用于以另一个用户或“root”(管理员)用户身份运行命令。使用sudo
运行脚本会导致更大的危险,容易搞砸事情。因此,如果您不知道使用sudo
的确切原因,请不要使用它。在这里发布的内容非常好。# A good place to put your scripts is in your ~/bin folder.
> cd ~/bin # or cd $HOME/bin
> ls -l
您将看到一个所有者和权限的列表。您会注意到,在此目录中,您“拥有”所有文件。您对此目录拥有完全控制权,没有其他人可以轻易修改它。
如果不存在,您可以创建一个:
> mkdir -p ~/bin && cd ~/bin
> pwd
/Users/Userxxxx/bin
# type the name of the script with the full path
> /path/to/script.sh
# execute the script from the directory it is in
> ./script.sh
# place the script in a directory that is on the PATH
> script.sh
# ... to see the list of directories in the path, use:
> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ... or for a list that is easier to read:
> echo -e ${PATH//:/\\n}
# or
> printf "%b" "${PATH//:/\\n}"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
# set the 'execute' permissions on the script
> chmod +x /path/to/script.sh
# using specific permissions instead
# FYI, this makes these scripts inaccessible by ANYONE but an administrator
> chmod 700 /path/to/script.sh
# set all files in your script directory to execute permissions
> chmod +x ~/bin/*
这里有一个很棒的权限讨论,还有一张酷炫的图表在这里。
> bash /path/to/script.sh
...
> php /path/to/script.php
...
> python3 /path/to/script.py
...
#!/bin/bash
)。如果将其作为脚本的第一行,系统将使用该程序来执行脚本。无需输入程序或使用扩展名。#!/usr/bin/env
后跟程序名称(例如#!/usr/bin/env bash
或#!/usr/bin/env python3
)让系统选择在PATH
中首次出现的程序版本来执行脚本。如此处所述,有利有弊。注意:这个“可移植”shebang可能并不像它看起来那么可移植。就像任何超过50年并深植于无数永远不会按照您期望的选项的东西一样...... 会有激烈的争论。我看到的最近的一个实际上与大多数想法非常不同,是“可移植”的perl-bang:
#!/bin/sh
exec perl -x "$0" "$@"
#!perl
script.sh
和script.php
是这些脚本的字面文件名,如果您在文件名中加入扩展名,则需要在运行脚本时包含它(反之亦然;如果脚本没有扩展名,则不要添加)。这与DOS不同,例如,您可以从文件名中省略.bat
或.exe
,并且文件需要具有一组小的扩展名才能被视为可执行文件。 - tripleeepath
、/path
、./path
和 ~/path
之间的区别。我猜你可能不想在这里解释它,但或许可以链接到一个解释,比如...哦该死,我得发这个链接。 - tripleee您可以执行以下操作:
sh scriptname.sh
首先,您需要使用以下命令将其设为可执行:chmod +x name_of_your_file_script
。
在您将其设置为可执行之后,您可以使用./same_name_of_your_file_script
运行它。
通过使用 cd 命令将目录更改为脚本所在位置的目录
然后输入
bash program-name.sh
cd
到任何地方;你可以在bash
命令中指定任意复杂的路径名作为参数;实际上,任何需要文件名参数的程序都是这样工作的(否则将非常可怕且令人昏迷)。 - tripleee如果您在脚本文件可用的目录或文件夹中,只需通过以下方式将文件权限更改为可执行模式:
chmod +x your_filename.sh
之后,您可以使用以下命令运行脚本。
$ sudo ./your_filename.sh
上面的“.”代表当前目录。 注意! 如果您不在bash脚本文件所在的目录中,则可以使用以下命令更改文件所在的目录:
cd Directory_name/write the complete path
否则,您的脚本无法运行。
sudo
并滥用了您不必要授予它的权限,则sudo
是错误的,甚至可能是极其错误的。 - tripleee
chmod +x 脚本名
然后运行./脚本名
。 - dirkgently