如何无需前缀bash直接执行自定义脚本?自定义test脚本直接执行无输出问题求助
如何无需前缀bash直接执行自定义脚本?自定义test脚本直接执行无输出问题求助
嘿,我来帮你捋捋这个问题~
你遇到的核心问题其实是脚本名字和Shell内置命令冲突了!从你给出的type -a test输出就能一眼看出来:
test is a shell builtin test is /home/saad/.local/bin/test test is /usr/bin/test test is /bin/test
Bash在执行命令时,优先级是内置命令 > 外部命令,所以当你直接输入test时,Shell会优先调用内置的test命令(这个命令本身是用来做条件判断的,执行后默认不会有任何输出),完全没轮到你放在~/.local/bin里的自定义脚本。
而你用bash test执行时,是明确告诉Bash去加载当前目录下的test文件作为脚本运行,所以能正常输出Hello。
给你几个实用的解决办法:
最推荐:重命名脚本
把你的自定义脚本改成别的名字,比如my_test或者hello_test,这样就不会和内置命令冲突了。改完名后,只要你已经加了可执行权限(chmod a+x my_test),而且~/.local/bin在PATH里,直接输入my_test就能执行,不用加bash前缀。不改名的话,用绝对/相对路径执行
如果你不想改脚本名字,可以直接用绝对路径调用:~/.local/bin/test或者如果脚本在当前目录,用相对路径:
./test用
command命令跳过内置命令
还可以用command命令强制Shell调用外部脚本,跳过内置命令:command test
另外补充下,你之前做的设置都是对的:给脚本加可执行权限、把脚本放到PATH目录里,这些都是让脚本能直接执行的必要步骤,只是栽在了名字冲突上~
备注:内容来源于stack exchange,提问作者Saad
相关产品推荐
相关产品推荐

