1

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

编辑:更清楚。我想要一个写“./”的快捷方式,为这些命令节省了 2 个键,例如在 DOS 中 foo.exe 可以用 foo 执行。如果我键入 foo (ENTER) ,是否无法在当前目录中查找 .bsh 文件?

4

3 回答 3

3

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

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

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

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

于 2012-10-29T19:38:59.277 回答
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
于 2012-10-29T19:49:01.710 回答
0

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

export PATH=$PATH:/your/directory

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

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

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

我希望它有所帮助。干杯

于 2012-10-29T19:35:29.233 回答