Fedora39的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash

bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash

  • #!/bin/bash , #!/usr/bin/bash
  • #!/bin/env bash , #!/usr/bin/env bash

Fedora39Workstation版的 /bin/usr/bin 的软链接, /sbin/usr/sbin 的软链接,

bash 复制代码
[root@fw39-1235vm ~]# ll /bin
lrwxrwxrwx. 1 root root 7 2023年 7月21日 /bin -> usr/bin
[root@fw39-1235vm ~]# ll /sbin
lrwxrwxrwx. 1 root root 8 2023年 7月21日 /sbin -> usr/sbin

所以

  • #!/bin/bash#!/usr/bin/bash 是等价的,
  • #!/bin/env bash#!/usr/bin/env bash 是等价的

那么 #!/bin/bash#!/bin/env bash 有什么不同呢?

#!/bin/bash 是直接调用 bash 命令

#!/bin/env bash 是调用 env 命令, 且 bash 作为参数, 从而调用 bash

执行以下命令的效果一样, 都相当于执行了 bash 命令, 新开子bash

bash 复制代码
bash
/bin/bash
/usr/bin/bash
/bin/env bash
/usr/bin/env bash
  • 使用 env 调用 bash 提供了灵活性, 可以变化bash的位置或多版本,只要写到环境变量PATH就行。但也降低了安全性,比如将恶意的命名为bash的程序放入环境变量PATH并靠前 .

  • 直接调用 bash 则更加安全?(好像也牵强)

另外, 既然可以写成 #!/usr/bin/env bash 这样执行命令的形式,

那也可以写成 #!bash 这样的形式

可以写成这样

相关推荐
sulikey5 分钟前
个人Linux操作系统学习笔记11 - 环境变量
linux·笔记·学习
Kina_C12 分钟前
NFS与Autofs快速讲解-从原理到实战配置
linux·nfs·autofs
皮卡狮16 分钟前
文件系统:磁盘硬件寻址和系统软件寻址
linux
是潮汕的灿灿展吖41 分钟前
Centos离线部署nfs操作
linux·运维·centos
Kina_C42 分钟前
Apache HTTP Server 安装、配置与高级功能详解
linux·http·apache
大不点wow43 分钟前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
阿里嘎多学长43 分钟前
2026-07-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
噢,我明白了1 小时前
Java中日期和字符串的处理
java·开发语言·日期
爱刷碗的苏泓舒1 小时前
C 语言 if-else 与 switch-case 分支语句对比
c语言·开发语言
治愈系贝壳1 小时前
ARM --- day 6 时钟
linux·arm开发·学习