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

可以写成这样

相关推荐
superman超哥11 分钟前
Context与任务上下文传递:Rust异步编程的信息高速公路
开发语言·rust·编程语言·context与任务上下文传递·rust异步编程
步达硬件13 分钟前
【Matlab】批量自定义图像处理
开发语言·matlab
Hey小孩13 分钟前
[个人总结] LDD3:3.字符驱动 - scull(4)
linux·驱动开发
军军君0114 分钟前
Three.js基础功能学习七:加载器与管理器
开发语言·前端·javascript·学习·3d·threejs·三维
陈让然14 分钟前
VS Code新版本无法连接WSL ubuntu18.04
linux·运维·ubuntu
liulilittle16 分钟前
OPENPPP2 网络驱动模式
开发语言·网络·c++·网络协议·信息与通信·通信
oMcLin17 分钟前
如何在Oracle Linux 8.4上通过配置Oracle RAC集群,确保企业级数据库的高可用性与负载均衡?
linux·数据库·oracle
小杰帅气18 分钟前
神秘的环境变量和进程地址空间
linux·运维·服务器
Vect__19 分钟前
基于CSAPP对链接和库的理解
linux
mjhcsp19 分钟前
C++ AC 自动机:原理、实现与应用全解析
java·开发语言·c++·ac 自动机