我有一个shell脚本,我想在不使用“sh”或“bash”命令的情况下运行。例如:
而不是:sh script.sh
我想使用:script.sh
我该怎么做呢?
P.S. (i)我不太使用shell脚本,我试着阅读关于别名的内容,但我不知道如何使用它们。
(ii)我还读了关于将脚本链接到PATH变量中的另一个文件。我正在使用我的大学服务器,我没有权限在这些位置创建文件。
我有一个shell脚本,我想在不使用“sh”或“bash”命令的情况下运行。例如:
而不是:sh script.sh
我想使用:script.sh
我该怎么做呢?
P.S. (i)我不太使用shell脚本,我试着阅读关于别名的内容,但我不知道如何使用它们。
(ii)我还读了关于将脚本链接到PATH变量中的另一个文件。我正在使用我的大学服务器,我没有权限在这些位置创建文件。
当前回答
只需确保它是可执行的,使用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。
其他回答
以下是我的备份脚本,将给你的想法和自动化:
服务器: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在您的路径中)
只是补充一下大家的建议。即使有了这些解决方案,如果用户希望以sudo的方式执行脚本,问题仍然会存在
例子: Chmod a+x /tmp/myscript.sh Sudo ln -s /tmp/myscript.sh /usr/local/bin/ myscript.sh
输入myscript可以工作,但输入sudo myscript将返回命令未找到。
作为sudo,你仍然必须键入sudo sh myscript或sudo bash myscript。
我想不出解决办法。
在本例中,文件名为myShell
首先,我们需要创建这个文件,我们可以输入以下内容:
sudo nano myShell
注意到没有。sh扩展名了吗? 这是因为当我们从终端运行它时,我们只需要键入myShell来运行我们的命令!
现在,在nano的顶部行必须是#!/bin/bash,然后在继续之前留下新行。
为了演示,我将添加一个基本的Hello World!响应
所以,我输入以下内容:
echo Hello World!
之后,我的例子应该是这样的:
#!/bin/bash
echo Hello World!
现在保存文件,然后运行这个命令:
chmod +x myShell
现在我们已经使文件可执行,我们可以使用以下命令将其移动到/usr/bin/:
sudo cp myShell /usr/bin/
恭喜!我们的命令现在完成了!在终端中,我们可以输入myShell,它应该说Hello World!
通过使用文件的属性使脚本文件成为可执行文件 在~/.bashrc中为可执行文件创建别名。别名<别名> = <完整脚本文件路径>' 刷新用户会话以应用它。源~ / . bashrc
只需确保它是可执行的,使用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。