我有一个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变量中的另一个文件。我正在使用我的大学服务器,我没有权限在这些位置创建文件。
当前回答
你可以输入sudo install(脚本的名称)/usr/local/bin/(你想输入什么来执行脚本)
例如:sudo install quickcommit.sh /usr/local/bin/quickcommit 输入密码
现在不需要.sh就可以在任何目录下运行
其他回答
添加。(当前目录)到您的PATH变量。 你可以通过编辑你的.profile文件来做到这一点。 在.profile文件中放入以下一行 = $ PATH:。 只需确保在脚本的开头添加Shebang (#!/bin/bash)行,并使脚本可执行(使用chmod +x <文件名>)。
使任何文件作为可执行文件
假设你有一个名为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
您必须为程序启用可执行位。
chmod +x script.sh
然后使用。/script.sh
您可以将该文件夹添加到.bashrc文件(位于您的主目录)的PATH中。 将这一行添加到文件的末尾:
export PATH=$PATH:/your/folder/here
通过使用文件的属性使脚本文件成为可执行文件 在~/.bashrc中为可执行文件创建别名。别名<别名> = <完整脚本文件路径>' 刷新用户会话以应用它。源~ / . bashrc
只是补充一下大家的建议。即使有了这些解决方案,如果用户希望以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。
我想不出解决办法。