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

Debian12的 /bin/usr/bin 的软链接, /sbin/usr/sbin 的软链接, (Debian12默认没有ll命令,用的ls -l

bash 复制代码
root@88:~# ls -l /bin
lrwxrwxrwx 1 root root 7 Nov  1  2023 /bin -> usr/bin
root@88:~# ls -l /sbin
lrwxrwxrwx 1 root root 8 Nov  1  2023 /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 这样的形式

可以写成这样

相关推荐
松涛和鸣10 小时前
32、Linux线程编程
linux·运维·服务器·c语言·开发语言·windows
sali-tec10 小时前
C# 基于halcon的视觉工作流-章69 深度学习-异常值检测
开发语言·图像处理·算法·计算机视觉·c#
我是唐青枫10 小时前
深入理解 C#.NET 运算符重载:语法、设计原则与最佳实践
开发语言·c#·.net
꧁坚持很酷꧂10 小时前
把虚拟机Ubuntu中的USB设备名称改为固定名称
linux·数据库·ubuntu
Xの哲學10 小时前
Linux NAT 深度剖析: 从设计哲学到实现细节
linux·服务器·网络·架构·边缘计算
张np11 小时前
java基础-Deque 接口
java·开发语言
柒壹漆11 小时前
用Python制作一个USB Hid设备数据收发测试工具
开发语言·git·python
LXS_35711 小时前
Day 16 C++提高之模板
开发语言·c++·笔记·学习方法
盒马盒马11 小时前
Rust:内部可变性 & 型变
开发语言·后端·rust
沐知全栈开发11 小时前
XSLT `<value-of>` 元素详解
开发语言