Fedora40的#!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

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

bash 复制代码
root@fedora:~# ll /bin
lrwxrwxrwx. 1 root root 7  1月24日 08:00 /bin -> usr/bin
root@fedora:~# ll /sbin
lrwxrwxrwx. 1 root root 8  1月24日 08:00 /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 这样的形式

可以写成这样

相关推荐
啦啦啦!2 小时前
c++AI大模型接入SDK项目
开发语言·数据结构·c++·人工智能·算法
lcj25112 小时前
【C语言】自定义类型1:结构体
c语言·开发语言·算法
jaysee-sjc2 小时前
十七、Java 高级技术入门全解:JUnit、反射、注解、动态代理
java·开发语言·算法·junit·intellij-idea
cyber_两只龙宝2 小时前
【Docker】Docker的自定义网络详解
linux·运维·网络·docker·云原生·容器
JustNow_Man2 小时前
【opencode】使用方法
linux·服务器·网络·人工智能·python
Dxy12393102162 小时前
Python使用SymSpell详解:打造极速拼写检查引擎
开发语言·python
时寒的笔记2 小时前
js7逆向案例_禁止f12打开&sojson打开
开发语言·javascript·ecmascript
初願致夕霞2 小时前
Linux_线程
linux·运维·服务器·c++
2401_892070982 小时前
【Linux C++ 后端实战】异步日志系统 AsyncLogging 完整设计与源码解析
linux·c++·高并发·异步日志
大鹏说大话2 小时前
什么是“过早优化”?
开发语言