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

可以写成这样

相关推荐
m0_748240254 小时前
Windows编程+使用C++编写EXE加壳程序
开发语言·c++·windows
兮兮能吃能睡5 小时前
R语言模型分析(一)(1)
开发语言·r语言
绵羊20235 小时前
单细胞转录组测序上游——cellranger
linux
wuk9987 小时前
基于有限差分法的二维平面热传导模型MATLAB实现
开发语言·matlab·平面
Awkwardx8 小时前
Linux系统编程—线程同步与互斥
linux·服务器
初见无风9 小时前
2.5 Lua代码中string类型常用API
开发语言·lua·lua5.4
做运维的阿瑞9 小时前
用 Python 构建稳健的数据分析流水线
开发语言·python·数据分析
左师佑图9 小时前
综合案例:Python 数据处理——从Excel文件到数据分析
开发语言·python·数据分析·excel·pandas
赖small强9 小时前
[Linux]内核队列实现详解
linux·kfifo·请求队列·工作队列(workqueue)·等待队列·kfifo_init
陌路209 小时前
C23构造函数与析构函数
开发语言·c++