AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 733152
Accepted
user330163
user330163
Asked: 2023-01-26 21:52:54 +0800 CST2023-01-26 21:52:54 +0800 CST 2023-01-26 21:52:54 +0800 CST

“sh 命令”和作为可执行文件运行之间有什么区别?

  • 772

我使用了@Artem S. Tashkinov 建议的脚本:“这是我为自己编写的,但它在控制台上运行。 ”

在这里查看相关帖子

$sh raw_io.sh: 
20: shopt: not found 
raw_io.sh: 
48: declare: not found 
raw_io.sh: 
61: Syntax error: redirection unexpected

我发现我只需要使其可执行并双击它,然后“在终端中运行”:

由于它令人耳目一新,我无法复制/粘贴输出。所以我做了一个屏幕截图: 在终端中输出运行

由于它通过双击工作,但我需要单击“在终端中运行”,我也想知道如何从终端直接启动它。

~/Desktop$ raw_io
raw_iso: command not found

那么这些启动方式有什么区别呢?

shell-script
  • 1 1 个回答
  • 83 Views

1 个回答

  • Voted
  1. Best Answer
    roaima
    2023-01-27T01:24:12+08:002023-01-27T01:24:12+08:00

    你如何执行一个名为的脚本myscript?

    sh myscript        # Or sh /path/to/myscript
    bash myscript      # Or bash /path/to/myscript
    perl myscript      # Or perl /path/to/myscript
    python myscript    # Or python /path/to/myscript
    

    等等

    这很容易,但您确实需要知道使用哪个解释器来运行脚本,正如您所注意到的,尝试使用错误的解释器会产生错误(例如,使用sh而不是bash)。

    更好的方法是让脚本自己声明正确的解释器。这是使用#!第一行定义的。例如,这一行将声明bash(特别是/bin/bash)作为解释器:

    #!/bin/bash
    

    要使用此功能,您需要使脚本可执行,

    chmod a+x myscript
    

    然后只要它位于中指定的冒号分隔目录列表之一中,$PATH您就可以像运行任何其他程序一样运行它 - 仅使用其名称

    myscript
    

    但是,请注意当前目录(标记为.)不在,$PATH因此如果您正在当前目录中处理脚本,则需要提供脚本的路径以便可以找到它。这里的.代表当前目录,它是相对于你当前工作目录的路径(即同一个地方):

    ./myscript    # Or /full/path/to/myscript
    

    .通常不在 中有充分的理由$PATH,但如果您必须添加它,则将其放在末尾$PATH而不是开头。(请参阅History of UNIX not including current directory in $PATH和Why is . not in the path by default?。)

    请注意,脚本名称或扩展名并不重要(除非您最终使用的命令名称test已经存在于 中列出的系统目录中$PATH)。我在myscript这里用作示例。如果你愿意,你可以使用myscript.sh,甚至confusion.png,但你不使用ls.exe,所以我认为没有必要myscript.sh。但是请注意,某些 GUI 可能会使用文件扩展名来猜测文件中的内容,并且以非标准方式(例如png脚本)使用扩展名可能会使它们感到困惑。GUI 识别文件内容的正确方法是使用与file命令等效的方法,但并非所有命令都这样做:

    file myscript
    

    最后,当我完成要重用的脚本时,我倾向于将它放入我的$PATH. ls然后它就变成了一个像或一样容易访问的工具cp。在我的例子中,我使用$HOME/bin但你可以选择任何你喜欢的目录,只要它在$PATH.

    • 2

相关问题

  • 在awk中的两行之间减去相同的列

  • 打印文件行及其长度的脚本[关闭]

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 按分隔符拆分并连接字符串问题

  • MySQL Select with function IN () with bash array

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve