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

可以写成这样

相关推荐
剑神一笑19 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
剑神一笑20 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
isyangli_blog21 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb20081121 小时前
FastAPI APIRouter
开发语言·python
Benszen21 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆1 天前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木1 天前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充1 天前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~1 天前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6161 天前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang