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 这样的形式

可以写成这样

相关推荐
野生技术架构师9 分钟前
1000 道 Java 架构师岗面试题
java·开发语言
湫兮之风18 分钟前
C++: Lambda表达式详解(从入门到深入)
开发语言·c++
鹿鸣天涯26 分钟前
Kali Linux 2025.3 正式发布:更贴近前沿的安全平台
linux·运维·安全
Porunarufu28 分钟前
JAVA·顺序逻辑控制
java·开发语言
Sylvia-girl35 分钟前
C语言中经常使用的函数
c语言·开发语言
~无忧花开~37 分钟前
JavaScript学习笔记(十五):ES6模板字符串使用指南
开发语言·前端·javascript·vue.js·学习·es6·js
周杰伦fans38 分钟前
C# 23种设计模式详解与示例
开发语言·设计模式·c#
CAE虚拟与现实1 小时前
PyQt和PySide中使用Qt Designer
开发语言·qt·pyqt·qt designer·pyside
Paul_09201 小时前
golang面经——channel模块
开发语言
奶茶树1 小时前
【Linux】基础指令
linux·服务器