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

可以写成这样

相关推荐
蒙娜丽宁15 小时前
Rust 性能优化指南:内存管理、并发调优与基准测试案例
开发语言·性能优化·rust
qiuiuiu41315 小时前
正点原子RK3568学习日志19- Linux错误处理 字符驱动框架完全体
linux·服务器·学习·ubuntu
如果是君15 小时前
【git使用】ubuntu下利用git工具提交一个工程
linux·git·ubuntu
橘颂TA15 小时前
【Linux】 层层递进,抽丝剥茧:调度队列、命令行参数、环境变量
linux·运维·服务器·c/c++
豐儀麟阁贵15 小时前
5.2 类
java·开发语言
九皇叔叔15 小时前
Java循环结构全解析:从基础用法到性能优化(含经典案例)
java·开发语言·python
X_szxj16 小时前
Volatility2在kali安装
linux·运维·服务器
像风一样!16 小时前
NFS文件存储
linux·服务器·网络·nfs文件存储
JanelSirry16 小时前
如何查看java死锁?具体怎么做,怎么避免
java·开发语言
大聪明-PLUS16 小时前
Linux 中的 DNS 工作原理(一):从 getaddrinfo 到 resolv.conf
linux·嵌入式·arm·smarc