bash - 执行快捷方式

时间:2012-10-29 19:28:30

标签: bash

我想执行foo.bsh只输入foo.bsh甚至foo而不是./foo.bsh。我想暂时对目录中的所有.bsh以及全局执行此操作。例如,我希望有一个全局密钥MYIP,它调用脚本来回显我的外部IP。我不知道这是否有意义,因为如果我覆盖了回声,我可能会崩溃。

编辑:更清楚。我想要一个写“./”的快捷方式为这些命令保存2个键,例如在DOS中可以用foo执行foo.exe。如果我键入foo(ENTER)?

,无法在当前目录中查找.bsh文件

3 个答案:

答案 0 :(得分:3)

当找不到命令时,你可以挂钩bash的处理,并添加你自己的函数来处理你喜欢的。例如,将其添加到.bashrc:

function command_not_found_handle()
{
    [ -f "${1}.bsh" ] && bash "${1}.bsh"
}

因此,如果您在当前目录中有foo.bsh,则只需键入“foo”即可运行。

编辑:澄清 - 当bash耗尽其内部机制来查找您键入的命令时,它将运行command_not_found_handle()函数,并将该命令的名称作为参数。因此,您可以使用您想要的任何逻辑来定义此函数。

答案 1 :(得分:2)

你真的不应该这样做,但是在.bashrc或session中键入它以将当前目录添加到PATH。

PATH=$PATH:.

当然这意味着如果有人在目录中放入一个名字相似的命令,就可以轻松执行。

攻击者如此:

cd /shared_directory
echo "rm -rf all_your_files" > apropo
chmod +x apropo

然后你:

cd /shared_directory
apro<TAB> (completes to apropo)
(all your files are gone).

如果你想知道这里的目标命令是适当的。

通常,更好的解决方案是将可执行文件链接到PATH中的某些内容,例如〜/ bin

所以:

PATH=$PATH:~/bin (in your bashrc or whatever)
ln -s ~/some_executable ~/bin
some_executable

答案 2 :(得分:0)

您可以通过编辑〜/ .bash_profile页面并将可执行文件的目录添加到列表末尾来实现此目的,例如

export PATH=$PATH:/your/directory

我通常创建一个〜/ bin目录并将所有可执行文件存储在此目录中。所以我通常将这个条目添加到我的〜/ .bash_profile文件

export PATH=$PATH:/home/yourname/bin/

之后我的bin目录中的所有脚本(以前都是chmod + x)只需通过控制台上的名称调用它们就可以了。

我希望它有所帮助。干杯