如何在 Unix 控制台或 Mac 终端上运行 shell 脚本?

2024-10-23 08:47:00
admin
原创
358
摘要:问题描述:我知道,忘记,然后重新学习。是时候把它写下来了。解决方案 1:要运行不可执行的sh脚本,请使用:sh myscript 要运行不可执行的bash脚本,请使用:bash myscript 要启动可执行文件(任何具有可执行权限的文件);您只需通过其路径指定它:/foo/bar /bin/bar ./ba...

问题描述:

我知道,忘记,然后重新学习。是时候把它写下来了。


解决方案 1:

要运行不可执行的sh脚本,请使用:

sh myscript

要运行不可执行的bash脚本,请使用:

bash myscript

要启动可执行文件(任何具有可执行权限的文件);您只需通过其路径指定它:

/foo/bar
/bin/bar
./bar

要使脚本可执行,请授予其必要的权限:

chmod +x bar
./bar

当文件可执行时,内核负责确定如何执行它。对于非二进制文件,这是通过查看文件的第一行来完成的。它应该包含hashbang

#! /usr/bin/env bash

hashbang 告诉内核要运行什么程序(在本例中,命令/usr/bin/env使用参数运行bash)。然后,脚本将传递给程序(作为第二个参数),以及您作为后续参数提供给脚本的所有参数。

这意味着每个可执行脚本都应该有一个 hashbang。如果没有,您就没有告诉内核它什么,因此内核不知道使用哪个程序来解释它。它可能是bash、、、perl或其他东西。(实际上,内核通常会使用用户的默认 shell 来解释文件,这非常危险,因为它可能根本python不是sh正确的解释器,或者它可能能够解析其中的一些内容,但行为上存在细微差异,例如和之间的情况shbash

备注/usr/bin/env

最常见的是,你会看到像这样的哈希爆炸:

#!/bin/bash

结果是内核将运行程序/bin/bash来解释脚本。不幸的是,bash默认情况下不总是附带,并且并不总是在中可用/bin。虽然在 Linux 机器上通常如此,但还有一系列其他 POSIX 机器bash在不同位置附带,例如/usr/xpg/bin/bash/usr/local/bin/bash

因此,要编写可移植的 bash 脚本,我们不能依赖对bash程序位置的硬编码。POSIX 已经有一个处理该问题的机制:PATH。这个想法是,您将程序安装在 中的一个目录中PATH,当您想要按名称运行程序时,系统应该能够找到您的程序。

遗憾的是,你不能这样做:

#!bash

内核不会(有些可能会)帮PATH你搜索。不过,有一个程序可以帮PATH你搜索,它叫做env。幸运的是,几乎所有系统都env安装了 中的程序/usr/bin。因此,我们开始env使用硬编码路径,然后它会PATH搜索bash并运行它,以便它可以解释你的脚本:

#!/usr/bin/env bash

这种方法有一个缺点:根据 POSIX,hashbang 可以有一个参数。在这种情况下,我们使用bash作为程序的参数env。这意味着我们没有剩余空间来将参数传递给bash。因此无法将类似的东西转换#!/bin/bash -exu为这种方案。您必须将其放在set -exuhashbang 后面。

这种方法还有另一个优点:有些系统可能附带了/bin/bash,但用户可能不喜欢它,可能发现它有缺陷或过时,并且可能bash在其他地方安装了自己的。这种情况通常发生在 OS X(Mac)上,Apple 附带了过时的版本,而用户使用 Homebrew 之类的东西/bin/bash安装最新版本。当您使用进行搜索的方法时,您会考虑用户的偏好并使用他喜欢的 bash,而不是系统附带的版本。/usr/local/bin/bash`env`PATH

解决方案 2:

要启动 shell 脚本‘file.sh’:

sh file.sh

bash file.sh

另一个选项是使用 chmod 命令设置可执行权限:

chmod +x file.sh

现在运行.sh文件如下:

./file.sh

解决方案 3:

对于 Bourne shell:

sh myscript.sh

对于 bash:

bash myscript.sh

解决方案 4:

如果您希望脚本在当前 shell 中运行(例如,您希望它能够影响您的目录或环境),您应该说:

. /path/to/script.sh

或者

source /path/to/script.sh

注意/path/to/script.sh可以是相对的,例如在当前目录下的目录中. bin/script.sh运行。script.sh`bin`

解决方案 5:

首先,允许执行:-

chmod +x script_name

  1. 如果脚本不可执行:-

运行 sh 脚本文件:-

sh script_name

运行 bash 脚本文件:-

bash script_name

  1. 如果脚本可执行:-

./script_name

注意:您可以使用“ls -a”检查该文件是否可执行

解决方案 6:

Terminal.app 的文件扩展名为 .command。双击任何 .command 文件即可执行该文件。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用