如何在不使用“sh”或“bash”命令的情况下运行shell脚本?

时间:2012-01-08 18:14:55

标签: bash shell alias sh

我有一个shell脚本,我想在不使用“sh”或“bash”命令的情况下运行。例如:

而不是:sh script.sh

我想使用:script.sh

我该怎么做?

P.S。 (i)我不太多使用shell脚本,我尝试阅读别名,但我不明白如何使用它们。

(ii)我还读到了将脚本与PATH变量中的另一个文件相关联的内容。我正在使用我的大学服务器,但我没有权限在这些位置创建文件。

11 个答案:

答案 0 :(得分:378)

在文件顶部添加“shebang”:

#!/bin/bash

使您的文件可执行(chmod +x script.sh)。

最后,修改路径以添加脚本所在的目录:

export PATH=$PATH:/appropriate/directory

(通常,您希望$HOME/bin存储您自己的脚本)

答案 1 :(得分:58)

这些是直接使用脚本名称的一些先决条件:

  1. 在最顶部添加she-bang {#!/bin/bash)行。
  2. 使用chmod u+x scriptname使脚本可执行。 (其中scriptname是您脚本的名称)
  3. 将脚本放在/usr/local/bin文件夹下。
  4. 仅使用脚本名称运行脚本。
  5. 注意:我建议将其放在/usr/local/bin文件夹下的原因是因为很可能是已添加到PATH variable的路径。

    更新

    如果您无权访问/usr/local/bin文件夹,请执行以下操作:

    1. 在您的主目录中创建一个文件夹,然后将其称为myscripts
    2. 在您的主目录上执行ls -lart,以识别您的shell正在使用的启动脚本。它应该是.profile.bashrc
    3. 确定启动脚本后,在脚本中添加以下行 - export set PATH=$PATH:~/myscript
    4. 添加后,请提供您的启动脚本或注销并重新登录。
    5. 使用scriptname执行您的脚本。

答案 2 :(得分:20)

使用chmod +x确保它是可执行的。默认情况下,当前目录不在PATH上,因此您需要将其作为./script.sh执行 - 或者通过限定路径引用它。或者,如果您真的需要script.sh,则需要将其添加到PATH中。 (您可能无权修改系统路径,但几乎可以肯定地修改您当前环境的PATH。)这也假设您的脚本以#!/bin/sh之类的东西开头。

你还可以使用一个别名,它与shell脚本无关,只与shell有关,而且很简单:

alias script.sh='sh script.sh'

只允许您使用script.sh(字面意思 - 这不适用于任何其他*.sh文件)而不是sh script.sh

答案 3 :(得分:13)

您必须为程序启用可执行位。

chmod +x script.sh

然后您可以使用./script.sh

您可以将文件夹添加到.bashrc文件(位于主目录中)的PATH中。 将此行添加到文件末尾:

export PATH=$PATH:/your/folder/here

答案 4 :(得分:12)

在此示例中,文件将被称为<div class="form-group" v-for="col in colInfo"> <template v-if="col.Type == 'text'"> <label class="badge badge-info">{{col.Field}}</label> <textarea class="form-control form-control-md" rows="3" v-on:change="updateInsertMap(col.Field)"></textarea> </template> <template v-else> <label class="badge badge-info">{{col.Field}}</label> <input type="text" class="form-control form-control-md" v:on:change="updateInsertMap(col.Field)"> </template> </div>

首先,我们需要创建这个文件,我们可以通过输入以下内容开始:

myShell

请注意,我们没有sudo nano myShell 扩展名? 那是因为当我们从终端运行它时,我们只需要输入.sh来运行我们的命令!

现在,在nano中,顶行必须为myShell,然后您可以在继续之前留下新行。

为了演示,我将添加一个基本的#!/bin/bash响应

所以,我输入以下内容:

Hello World!

之后我的例子应该是这样的:

echo Hello World!

现在保存文件,然后运行此命令:

#!/bin/bash
echo Hello World!

现在我们已经使文件可执行,我们可以使用以下命令将其移动到sudo chmod +x myShell

/usr/bin/

为确保机器能够正确执行,我们需要重启机器

我使用了sudo cp myShell /usr/bin/

恭喜!我们的命令现在完成了!在终端中,我们可以输入sudo shutdown -r now,并且应该说myShell

答案 5 :(得分:6)

您可以输入sudo install(脚本名称)/ usr / local / bin /(您要键入以执行所述脚本的内容)

ex:sudo install quickcommit.sh /usr/local/bin/quickcommit 输入密码

现在可以在没有.sh和任何目录的情况下运行

答案 6 :(得分:3)

添加。 (当前目录)到您的PATH变量 您可以通过编辑.profile文件来完成此操作 将以下行放在.profile文件中 PATH=$PATH:.

只需确保在脚本的开头添加Shebang(#!/bin/bash)行并使脚本可执行(使用chmod +x <File Name>)。

答案 7 :(得分:0)

这是我的备份脚本,它将为您提供想法和自动化:

服务器:Ubuntu 16.04 PHP:7.0 Apache2,Mysql等...

# Make Shell Backup Script - Bash Backup Script
    nano /home/user/bash/backupscript.sh
        #!/bin/bash
        # Backup All Start
        mkdir /home/user/backup/$(date +"%Y-%m-%d")
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_rest.zip /etc -x "*apache2*" -x "*php*" -x "*mysql*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_apache2.zip /etc/apache2
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_php.zip /etc/php
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_mysql.zip /etc/mysql
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_rest.zip /var/www -x "*html*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_html.zip /var/www/html
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*"
        # Backup All End
        echo "Backup Completed Successfully!"
        echo "Location: /home/user/backup/$(date +"%Y-%m-%d")"

    chmod +x /home/user/bash/backupscript.sh
    sudo ln -s /home/user/bash/backupscript.sh /usr/bin/backupscript

将/ home / user更改为您的用户目录,并在终端上的任意位置键入: backupscript 以运行脚本! (假设/ usr / bin在你的路径中)

答案 8 :(得分:0)

在脚本前输入"#!/bin/sh"。 然后将其另存为script.sh。 将其复制到$HOME/bin$HOME/usr/bin
在不同的Linux发行版上,目录可以不同,但​​是它们以'bin'结尾并且位于主目录中     cd $HOME/bin$HOME/usr/bin
输入chmod 700 script.sh
您只需在终端上输入run.sh即可运行它。 如果不起作用,请尝试使用chmod +x run.sh而不是chmod 700 run.sh

答案 9 :(得分:0)

只是:

/path/to/file/my_script.sh

答案 10 :(得分:0)

将任何文件设为可执行文件


假设您有一个名为migrate_linux_amd64的可执行文件,并且您希望将其作为“ migrate”之类的命令来运行

  1. 首先从文件位置测试可执行文件:
[oracle@localhost]$ ./migrate.linux-amd64 
Usage: migrate OPTIONS COMMAND [arg...]
       migrate [ -version | -help ]

Options:
  -source          Location of the migrations (driver://url)
  -path            Shorthand for -source=file://path 
  -database        Run migrations against this database (driver://url)
  -prefetch N      Number of migrations to load in advance before executing (default 10)
  -lock-timeout N  Allow N seconds to acquire database lock (default 15)
  -verbose         Print verbose logging
  -version         Print version
  -help            Print usage

Commands:
  goto V       Migrate to version V
  up [N]       Apply all or N up migrations
  down [N]     Apply all or N down migrations
  drop         Drop everyting inside database
  force V      Set version V but don't run migration (ignores dirty state)
  version      Print current migration version
  1. 确保您对文件具有执行权限
    -rwxr-xr-x 1 oracle oinstall 7473971 May 18 2017 migrate.linux-amd64
    如果没有,请运行chmod +x migrate.linux-amd64

  2. 然后将文件复制到/usr/local/bin。该目录归root所有,使用sudo或切换到root并执行以下操作

sudo cp migrate.linux-amd64 /usr/local/bin
sudo chown oracle:oracle /user/local/bin/migrate.linux.amd64
  1. 然后创建如下所示的符号链接
sudo ln /usr/local/bin/migrate.linux.amd64 /usr/local/bin/migrate
sudo chown oracle:oracle /usr/local/bin/migrate
  1. 最后将/ usr / local / bin添加到您的路径或用户配置文件中
export PATH = $PATH:/usr/local/bin
  1. 然后以“ migrate”身份运行命令
[oracle@localhost]$ migrate
Usage: migrate OPTIONS COMMAND [arg...]
       migrate [ -version | -help ]

Options:
  -source          Location of the migrations (driver://url)
  -path            Shorthand for -source=file://path 
  -database        Run migrations against this database (driver://url)
  -prefetch N      Number of migrations to load in advance before executing (default 10)
  -lock-timeout N  Allow N seconds to acquire database lock (default 15)
  -verbose         Print verbose logging
  -version         Print version
  -help            Print usage

Commands:
  goto V       Migrate to version V
  up [N]       Apply all or N up migrations
  down [N]     Apply all or N down migrations
  drop         Drop everyting inside database
  force V      Set version V but don't run migration (ignores dirty state)
  version      Print current migration version
相关问题