我有一个shell脚本,我想在不使用“sh”或“bash”命令的情况下运行。例如:
而不是:sh script.sh
我想使用:script.sh
我该怎么做?
P.S。 (i)我不太多使用shell脚本,我尝试阅读别名,但我不明白如何使用它们。
(ii)我还读到了将脚本与PATH变量中的另一个文件相关联的内容。我正在使用我的大学服务器,但我没有权限在这些位置创建文件。
答案 0 :(得分:378)
在文件顶部添加“shebang”:
#!/bin/bash
使您的文件可执行(chmod +x script.sh
)。
最后,修改路径以添加脚本所在的目录:
export PATH=$PATH:/appropriate/directory
(通常,您希望$HOME/bin
存储您自己的脚本)
答案 1 :(得分:58)
这些是直接使用脚本名称的一些先决条件:
she-bang {#!/bin/bash)
行。chmod u+x scriptname
使脚本可执行。 (其中scriptname
是您脚本的名称)/usr/local/bin
文件夹下。 注意:我建议将其放在/usr/local/bin
文件夹下的原因是因为很可能是已添加到PATH variable
的路径。
如果您无权访问/usr/local/bin
文件夹,请执行以下操作:
myscripts
。ls -lart
,以识别您的shell正在使用的启动脚本。它应该是.profile
或.bashrc
。 export set PATH=$PATH:~/myscript
。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”之类的命令来运行
[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 migrate.linux-amd64
如果没有,请运行chmod +x migrate.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
export PATH = $PATH:/usr/local/bin
[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