我怎样才能在不输入 bash 的情况下执行自定义脚本?

我怎样才能在不输入 bash 的情况下执行自定义脚本?

我想运行我的自定义脚本,但每次需要执行它时,我都必须在脚本名称前键入 bash。但我想像运行其他脚本一样运行它,例如ls git sed chmodetc,在这些脚本中不需要在脚本名称前键入 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
  1. 您的脚本的名称test内置命令

  2. 绝不将您的脚本命名为与内部命令完全相同 - 这将产生不良后果。

  3. 所以你只需要命名你的脚本文件其他东西test(或任何其他内部命令)。

  4. 如果你想运行自己的脚本反而标准应用程序(如ls)的别名,您应该使用脚本的名称和完整路径创建别名,例如:

    alias ls='/home/saad/.local/bin/myscript'
    
重要的提示:

下次你问这样的问题时,请包括正确的脚本的名称,而不是占位符名称。既然您已经包含了正确的名称,那么对于这里的许多用户来说,很明显它被称为test,这与内部命令相同。

相关内容