我想运行我的自定义脚本,但每次需要执行它时,我都必须在脚本名称前键入 bash。但我想像运行其他脚本一样运行它,例如ls git sed chmod
etc,在这些脚本中不需要在脚本名称前键入 bash。
我在这里没有找到任何解决方案,但最接近的是这个Bash 脚本什么也不做
我已经创建了一个名为的脚本test
#!/bin/bash
echo Hello
但是当我在终端上输入它时,它没有给出任何错误,也没有打印任何内容
user@notebook:~$ test
user@notebook:~$
但是当我用 bash 输入它时它有效
user@notebook:~$ bash test
Hello
user@notebook:~$
我已将该文件添加到~/.local/bin/
,赋予它权限chmod a+x test
并将~/.local/bin
其设置在我的PATH
变量中。
我stat /bin/bash
的是
File: /bin/bash
Size: 1396520 Blocks: 2728 IO Block: 4096 regular file
Device: 806h/2054d Inode: 30408799 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-07 12:23:17.179593764 +0500
Modify: 2022-01-06 21:23:33.000000000 +0500
Change: 2022-10-08 20:47:19.225627603 +0500
Birth: 2022-10-08 20:47:19.217622335 +0500
我stat /bin
的是
File: /bin -> usr/bin
Size: 7 Blocks: 0 IO Block: 4096 symbolic link
Device: 806h/2054d Inode: 12 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-07 12:22:43.299594371 +0500
Modify: 2022-10-08 20:47:18.020812502 +0500
Change: 2022-10-08 20:47:18.020812502 +0500
Birth: 2022-10-08 20:47:18.020812502 +0500
的输出type -a test
为:
test is a shell builtin
test is /home/saad/.local/bin/test
test is /usr/bin/test
test is /bin/test
答案1
这暴露了真正发生的事情:
的输出
type -a test
为:test is a shell builtin test is /home/saad/.local/bin/test test is /usr/bin/test test is /bin/test
您的脚本的名称
test
与内置命令绝不将您的脚本命名为与内部命令完全相同 - 这将产生不良后果。
所以你只需要命名你的脚本文件其他东西比
test
(或任何其他内部命令)。如果你想运行自己的脚本反而标准应用程序(如
ls
)的别名,您应该使用脚本的名称和完整路径创建别名,例如:alias ls='/home/saad/.local/bin/myscript'
重要的提示:
下次你问这样的问题时,请包括正确的脚本的名称,而不是占位符名称。既然您已经包含了正确的名称,那么对于这里的许多用户来说,很明显它被称为test
,这与内部命令相同。