我想执行 foo.bsh,只输入 foo.bsh 甚至 foo 而不是 ./foo.bsh。我想暂时对目录中的所有 .bsh 以及全局执行此操作。例如,我想要一个全局密钥 MYIP,它调用脚本来回显我的外部 IP。我不知道这是否有意义,因为如果我覆盖回声,我的 bash 可能会崩溃。
编辑:更清楚。我想要一个写“./”的快捷方式,为这些命令节省了 2 个键,例如在 DOS 中 foo.exe 可以用 foo 执行。如果我键入 foo (ENTER) ,是否无法在当前目录中查找 .bsh 文件?
我想执行 foo.bsh,只输入 foo.bsh 甚至 foo 而不是 ./foo.bsh。我想暂时对目录中的所有 .bsh 以及全局执行此操作。例如,我想要一个全局密钥 MYIP,它调用脚本来回显我的外部 IP。我不知道这是否有意义,因为如果我覆盖回声,我的 bash 可能会崩溃。
编辑:更清楚。我想要一个写“./”的快捷方式,为这些命令节省了 2 个键,例如在 DOS 中 foo.exe 可以用 foo 执行。如果我键入 foo (ENTER) ,是否无法在当前目录中查找 .bsh 文件?
当找不到命令时,您可以挂钩 bash 的处理,并添加您自己的函数来处理您喜欢的任何内容。例如,将此添加到您的 .bashrc:
function command_not_found_handle()
{
[ -f "${1}.bsh" ] && bash "${1}.bsh"
}
因此,如果您在当前目录中有 foo.bsh,您只需键入“foo”,它就会运行。
编辑:澄清——当 bash 用尽其内部机制来查找您键入的命令时,它将以命令名称作为参数运行 command_not_found_handle() 函数。所以,你可以用你想要的任何逻辑来定义这个函数。
你真的不应该这样做,但是在你的 .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
您可以通过编辑 ~/.bash_profile 页面并将可执行文件所在的目录添加到列表末尾来实现此目的,例如
export PATH=$PATH:/your/directory
我通常创建一个 ~/bin 目录并将我所有的可执行文件存储在这个目录中。所以我通常将此条目添加到我的 ~/.bash_profile 文件中
export PATH=$PATH:/home/yourname/bin/
之后,我的 bin 目录中的所有脚本(以前是 chmod +x )只需在控制台上通过名称调用它们即可工作。
我希望它有所帮助。干杯