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

可以写成这样

相关推荐
Joy T1 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
曦夜日长5 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch
专注仿真5 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes5 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
shimly1234565 小时前
给断网无 sudo ubuntu22.04 机器安装 nodejs
linux
代码不停6 小时前
自动化测试(java)
java·开发语言·selenium·自动化
别动我齐刘海7 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
Lsetea7 小时前
OpenSSL报certificate chain too long:error 22与verify_depth深度排查
linux·https·ssl证书·openssl·证书链
鬼手点金8 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟8 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php