./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell

Linux time命令三重时间解析:user、system、elapsed深度辨析 在Linux性能分析中,time命令报告的user、system和elapsed(real)时间构成基础但易被误读的三重时间模型。user时间反映进程在用户态消耗的CPU周期,system时间体现内核态服务开销(如系统调用处理),而elapsed是包含I/O等待、调度延迟等在内的真实墙钟时间。三者关系并非简单相加,而是揭示程序计算密集度、内核依赖强度与外部资源瓶颈的关键线索。正确区分它们,是定位Python脚本高延迟、CI构建耗时漂移、容器CPU限频异常等问题的前提。本文基于GNU time与Bash内置t 阅读详情

最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell


执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip

把这个文件解开,发现有一个 copy_media.sh 脚本,就是用 adb push 向 android devices 复制文件,很简单的一个脚本,执行起来却有错

$./copy_media.sh 1920x1080

1920x1080
./copy_media.sh: 22: [: 1920x1080: unexpected operator
./copy_media.sh: 25: [: 1920x1080: unexpected operator
./copy_media.sh: 28: [: 1920x1080: unexpected operator
./copy_media.sh: 31: [: 1920x1080: unexpected operator
./copy_media.sh: 34: [: 1920x1080: unexpected operator
Usage: copy_media.sh [720x480|1280x720|1920x1080] [-s serial]
  for testing up to 1280x720, copy_media.sh 1280x720
  default resolution, when no argument is specified, is 480x360
  copy_media.sh all will copy all the files.

但如果我用

$. copy_media.sh 1920x1080

执行就没有问题, 为何?我的猜想是:

./ 是用 /bin/sh 执行 copy_media.sh , 它比较”原始“,因此解释不了 其中的 if [ ... ] 语句.  用 . 就是在当前的 bash 下执行,所以成功了。


下面验证我猜想是否正确

我用 $env | grep SHELL输出是bash,那为何 copy_media.sh 是用 /bin/sh 执行

SHELL=/bin/bash


再看文件开始部分,真相大白,原来 copy_media.sh 指定用 /bin/sh执行

head copy_media.sh 
#!/bin/sh
# Copyright (C) 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software

而用 . (就是 source 命令) 绕开了 #!/bin/sh;另一种方法是删除这行,就会使用$SHELL变量执行的shell;当然改成#!/bin/bash 也可以解决问题。


总结:

Linux 解释脚本按使用 shell 的顺序是

1)  脚本第一行中 #!指定

2) 没有指定就使用 $SHELL 

而使用 . 就是在当前 shell 中执行,当然就不会关注 !#/bin/sh 中的指定了.


Claude Code CLI安装全指南:原生脚本避坑与终端环境适配 CLI(命令行接口)是开发者与系统交互的核心通道,其本质是将自然语言意图转化为可执行指令的桥梁。Claude Code作为基于Rust构建的原生CLI工具,不依赖Node.js等运行时,通过终端直接调用系统能力实现智能命令编排。其技术价值在于打破IDE绑定、支持跨平台一致体验,并具备意图解析、结果反馈与流程决策能力。典型应用场景包括自动化Git工作流、CI/CD环境集成、数据工程脚本提效等。本文聚焦‘claude code安装’与‘终端环境适配’两大高频痛点,详解原生脚本安装原理、PATH路径配置、Shel 阅读详情

相关推荐

Apache Commons Text漏洞深度剖析:从字符串插值到远程代码执行

字符串插值是一种在编程中常见的文本处理技术,它允许将变量或表达式嵌入字符串模板,并在运行时动态替换为实际值。其原理是通过特定的语法标记(如${...})识别占位符,并依据预定义的解析规则或数据源进行值替换。这项技术能显著提升代码的灵活性和可维护性,广泛应用于配置解析、模板渲染、国际化等场景。然而,当插值引擎的功能过于强大且默认配置不安全时,就可能引入严重的安全风险。Apache Commons Text库的CVE-2022-42889漏洞(Text4Shell)正是这样一个典型案例,其默认插值器内置了脚本执

weixin_34327223的博客 349

Ubuntu限制用户登录:修改/etc/passwd shell字段的底层安全实践

Linux系统中,用户登录能力由shell字段严格控制,其本质是POSIX标准定义的会话入口机制。当`/etc/passwd`第七列指定为`/usr/sbin/nologin`或`/bin/false`时,系统在认证通过后直接终止交互式会话,不依赖图形界面、PAM或服务重启,具备高可靠性与跨发行版兼容性。该技术可有效防范误操作、自动化攻击及权限滥用,同时保留Samba共享、Web服务、rsync脚本等非交互功能,广泛适用于家用NAS、教育机房、Docker宿主机及WSL开发环境。Ubuntu用户尤其需关注此

weixin_30527323的博客 302

Linux运维工程师核心技能实战:从零构建自动化监控与容器化部署体系

在IT基础设施管理与服务保障领域,系统监控与自动化部署是保障业务连续性的关键技术。其核心原理在于通过实时数据采集、状态感知与策略执行,实现对服务器、应用及网络资源的全生命周期管理。掌握这些技术能显著提升运维效率,降低人为错误,并快速响应故障。典型的应用场景包括企业级服务状态监控、自动化应用发布、数据库性能优化及日常维护任务脚本化。本文聚焦于Zabbix监控平台与Docker容器化技术,通过实战演示如何搭建企业级监控告警系统,并利用Docker实现应用环境的标准化部署与隔离,为构建稳定、高效的运维体系提供完整

weixin_34075268的博客 297

Linux环境变量加载机制与实战配置全解析

环境变量是Linux进程间传递配置的核心机制,本质是内核为每个进程分配的键值对内存块,通过execve系统调用沿进程树继承。其生效逻辑不取决于文件位置,而由shell类型(login/interactive/non-login)和启动上下文(终端/GUI/systemd)严格决定。理解PATH、HOME等变量的分层加载链路(/etc/environment→/etc/profile→~/.profile→~/.bashrc→~/.config/environment.d),可精准解决‘命令找不到’‘脚本中变

weixin_30263277的博客 395

Oracle监听器日志膨胀问题:Linux与Windows平台自动化清理方案

在数据库运维中,日志管理是保障系统稳定性的基础环节。日志文件记录了系统运行的关键信息,其核心原理是通过持续写入操作状态来支持问题诊断与审计。有效的日志管理技术能预防磁盘空间耗尽,避免由此引发的服务中断风险,尤其在Oracle数据库等高并发场景中价值显著。监听器日志(listener.log)作为记录客户端连接请求的核心文件,若缺乏自动滚动机制,会持续增长成为“空间杀手”,影响数据库归档日志写入等关键功能。本文聚焦listener.log文件,针对其在Linux和Windows平台上的自动化清理与滚动配置,提

weixin_30731305的博客 554

GnuWin32:在Windows命令行中无缝使用Linux核心工具

命令行工具是开发者和系统管理员进行文本处理、文件操作和自动化任务的核心手段。在跨平台开发中,Linux的GNU工具链(如grep、sed、awk)以其强大的功能和简洁的语法成为事实标准。其原理是通过一系列单一功能的程序,利用管道和重定向进行组合,实现复杂的数据处理。这种技术价值在于极大地提升了工作效率和脚本的可移植性。对于需要在Windows环境下工作的用户,虽然PowerShell功能强大,但直接使用熟悉的Unix风格命令能减少上下文切换,简化操作流程。GnuWin32项目正是为了解决这一痛点,它将上百个

weixin_30321709的博客 391

linux 选择 脚本,./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell

最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell执行cts的的 media stress test 需要安装android-cts-media-1.0.zip把这个文件解开,发现有一个copy_media.sh 脚本,就是用 adb push 向 android devices 复制文件,很简单的一个脚本,执行起来却有错$./copy_media.sh 1920x1...

weixin_32612253的博客 409

NVIDIA DGX Spark (Ubuntu 24.04) 部署Isaac Sim与Isaac Lab:二进制安装与ROS2集成实战

本文详细介绍了在NVIDIA DGX Spark工作站(Ubuntu 24.04系统)上,通过预编译二进制包稳定部署Isaac Sim与Isaac Lab的完整实战流程。文章重点剖析了二进制安装相较于源码编译和pip安装的优势,有效规避了CUDA、PyTorch等关键组件的版本冲突陷阱,并逐步指导完成环境配置、Isaac Lab集成、Conda环境管理以及ROS2 Jazzy的集成,最终构建出完整的机器人仿真与强化学习开发平台。

kite3的博客 396

`/bin/bash`、`sh` 或者直接./的区别

在实际使用中,根据脚本内容和预期的运行环境选择最适合的方式。如果不确定,检查脚本的内容和所需的 shell 功能,选择合适的方法来确保脚本按预期运行。或者直接执行脚本(不指定 shell)确实会有一些区别,主要涉及到默认 shell 的不同以及环境变量的处理。在 cron 任务中,使用。

keyboard专栏 824

【论文精读】Latent Diffusion

Latent Diffusion

weixin_44934783的博客 4476

ROS教程(四):RVIZ使用教程(详细图文)

前言 根据前面的教程已经学会了创建功能包,那么本篇文章主要内容则是通过节点来发布数据至RVIZ

Leslie的博客 17万+

#!/bin/bash

#!/bin/bash是指此脚本使用/bin/bash来解释执行。 其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。 bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,... 我们可以通过以下一个示例来进行实验,了解#!/bin/bash的使用。 1)#!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。...

weixin_34268610的博客 691

华为OD机试:使用Ascend C语言实现Matmul与LeakyReLU融合算子的全流程设计与优化解析

通过本文的详细解析,相信你已经对华为OD机试中基于Ascend C语言的Matmul+LeakyReLU融合算子的设计与实现有了深入的理解。我们不仅从理论上探讨了融合算子的核心优势,还通过实际的代码示例演示了如何一步步完成算子的实现与优化。融合算子在AI算子开发中的应用,尤其是在处理大规模矩阵计算的场景中,能够显著提升计算效率,优化内存占用,并减少数据传输的开销。通过合理的Tiling策略设计,我们还能够充分利用多核处理器的算力,进一步提升AI模型的训练与推理性能。

qq_38334677的博客 661

关于#!/bin/bash

#!/bin/bash是指此脚本使用/bin/bash来解释执行。 其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。 bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,... 我们可以通过以下一个示例来进行实验,了解#!/bin/bash的使用。 除第一行外,脚本中所有以“#”开头的行都是注释。 1)#!/bin/bash只能放在第一行,如果后面还有#!,那么...

南沙的星星 3万+

运维颠覆!一文解锁AI赋能运维实战秘籍,效率飙升!

将AI应用于运维工作是一场极具价值的变革,从故障预测与诊断到自动化任务执行,再到资源管理优化,AI都展现出巨大潜力。尽管在实践过程中会面临数据质量、模型复杂性等挑战,但通过合理的技术选型和解决方案,我们能够充分挖掘AI的优势,实现运维工作的高效、智能转型。持续探索和创新AI在运维领域的应用,将为企业的数字化发展提供坚实保障。在科技飞速发展的当下,运维领域正经历着深刻变革,AI的融入成为提升运维效率与质量的关键。本文将深入实战,带你领略AI如何在运维各环节大显身手,让你的运维工作开启智能高效新模式。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 401

二维光子晶体禁带的遗传优化算法实现

二维光子晶体禁带的遗传优化算法MATLAB源代码 光子晶体中因周期性结构而存在的频率禁带称为光子禁带,光子禁带的存在是光子晶体具有广泛应用前景的重要原因。 禁带越大,可控光的频带也越宽,因此如何设计合适的晶体结构以获得大的光子禁带一直是研究和应用的重点与热点。 给大家讲解在平面波展开法的基础上,使用遗传算法寻找具有最大光子禁带的二维光子晶体结构。 %-------------------------------------------------------------------------- % Ph

m0_53407570的博客 583

Linux环境变量与Shell变量本质区别及实战排错

环境变量和Shell变量是Linux进程通信的基础机制,其核心差异在于作用域与导出状态的双重绑定:未export的Shell变量仅存在于当前Shell内存,而export后才写入内核分配的环境块,供子进程通过execve()继承。这种机制决定了PATH扩展、Python包加载、Docker容器变量传递、CI/CD脚本执行等关键场景的成败。掌握env(读环境块)、set(查Shell内存)、export -p(验导出状态)三命令的底层行为,能精准定位‘命令找不到’‘变量丢失’‘跨Shell失效’等高频问题。本

weixin_34034261的博客 416

学Simulink——基于直流电机的建模与控制场景实例:他励直流电机的起动与制动过程仿真

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

xiaoheshang_123的博客 227

命令行中的“隐形符号”:从 - 标准输入到 -- 选项终止符

本文介绍了 Linux 命令行中两个重要但容易被忽视的特殊符号 - 和 -- 的用法与区别。- 用作标准输入/输出的占位符,表示数据流而非文件,常见于管道操作和流式处理;-- 作为选项终止符,确保后续参数不被解析为选项,常用于处理特殊文件名。文章通过典型场景、变体分析和组合应用,展示了这两个符号在命令衔接、参数边界保护等方面的实用价值。理解这些约定符号有助于编写更安全高效的命令行操作和脚本,体现了 Unix 简单通用的设计哲学。

vortex5的博客 1120

使用 FastAPI 和 LangGraph 构建生产级智能体 AI 系统

这是一本关于使用 FastAPI 和 LangGraph 构建生产级智能体 AI 系统的详细书籍,全文约 10 万字。《Production-Grade Agentic AI System Design and Implementation: Building Agentic AI Systems Using FastAPI and LangGraph》随着人工智能(AI)技术的迅猛发展,智能体(Agent)作为能够自主感知、推理、决策和行动的实体,正逐渐成为构建复杂智能系统的核心。从个性化推荐、客户服务到

AI天才研究院 347

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深入解析RCE漏洞:从代码执行到命令执行的攻防实战

在网络安全领域,远程代码执行(RCE)是一种高危漏洞,它允许攻击者在目标系统上执行任意代码或命令,从而完全控制系统。理解RCE的本质需要从基础概念入手:代码执行漏洞通常发生在应用程序运行时环境中,攻击者通过注入恶意代码片段(如利用PHP的eval()或Python的exec()函数)来获得与应用程序相同的权限。而命令执行漏洞则更为底层,攻击者直接与操作系统Shell交互,通过系统命令(如Linux的system()或Windows的Runtime.exec())执行操作。这两种漏洞的核心原理都是将不可信的用

weixin_34175509的博客 506

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux系统管理核心:从内核到工具链的认知与实践指南

在Linux系统管理中,理解内核与发行版的区别是基础。Linux内核作为操作系统的核心,负责资源调度与硬件交互,而用户日常接触的是包含GNU工具、Shell及各类应用程序的发行版。这种模块化设计遵循Unix哲学,即每个工具专注单一功能,通过组合实现复杂任务。其技术价值在于提供了高度灵活、可定制的系统环境,广泛应用于服务器运维、云计算和嵌入式开发等领域。本文通过解析系统管理工具链,如包管理器和服务控制器,帮助读者掌握正确的故障排查方法,避免常见的认知误区,从而提升Linux环境下的工程实践能力。

weixin_30394669的博客 379

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

网络安全攻防实战:从反弹Shell原理到OOB数据外传技术解析

在网络攻防领域,理解网络连接的基本原理是掌握高级渗透技术的基础。正向连接与反向连接是两种核心的网络通信模式,正向连接遵循客户端主动连接服务器的传统模式,而反向连接则通过让目标主机主动外连来绕过防火墙限制,这种技术在渗透测试中具有重要价值。反弹Shell正是反向连接的典型应用,它通过建立隐蔽的命令控制通道,实现对远程主机的操控,常被用于权限维持和内网横向移动。在实际攻防对抗中,攻击者会利用Netcat、PowerShell等多种工具实现反弹Shell,而防御方则需要通过进程监控、网络流量分析和行为检测等手段进

leonard61306500的专栏 487
上一篇: xvfb 初步探究
下一篇: 用python实现远程复制 (scp + expect )
span76
博客等级 码龄18年 117粉丝 174原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值