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

而不是:sh script.sh

我想使用:script.sh

我该怎么做呢?

P.S. (i)我不太使用shell脚本,我试着阅读关于别名的内容,但我不知道如何使用它们。

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


当前回答

在文件顶部添加一个“shebang”:

#!/bin/bash

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

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

export PATH=$PATH:/appropriate/directory

(通常,你需要$HOME/bin来存储你自己的脚本)

其他回答

添加。(当前目录)到您的PATH变量。 你可以通过编辑你的.profile文件来做到这一点。 在.profile文件中放入以下一行 = $ PATH:。 只需确保在脚本的开头添加Shebang (#!/bin/bash)行,并使脚本可执行(使用chmod +x <文件名>)。

以下是我的备份脚本,将给你的想法和自动化:

服务器: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在您的路径中)

输入“# !/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

只需确保它是可执行的,使用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。

使任何文件作为可执行文件


假设你有一个名为migrate_linux_amd64的可执行文件你想要运行这个文件,比如"migrate"

首先从文件位置测试可执行文件:

[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

确保您对该文件具有执行权限 -rwxr-xr-x 1 oracle oinstall 7473971 May 18 2017 migration .linux-amd64 . zip 否= >执行chmod +x migration .linux-amd64 然后将文件复制到/usr/local/bin。该目录为root目录,请使用sudo或切换到root目录执行以下操作

sudo cp migrate.linux-amd64 /usr/local/bin
sudo chown oracle:oracle /user/local/bin/migrate.linux.amd64

然后创建一个如下所示的符号链接

sudo ln /usr/local/bin/migrate.linux.amd64 /usr/local/bin/migrate
sudo chown oracle:oracle /usr/local/bin/migrate

最后将/usr/local/bin添加到您的路径或用户配置文件中

export PATH = $PATH:/usr/local/bin

然后运行命令"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