interpreter

将解析分为简单解析和复杂解析是否正确?
interpreter

将解析分为简单解析和复杂解析是否正确?

我将“字段拆分”(或“单词拆分”)理解为可能的称为解析的更广泛过程的一部分,而字段分割是通过字段分离程序(例如 Bourne shell 和派生程序上的 IFS)在各种 shell 中进行解析时完成的。 将解析分为简单和复杂,而简单不包括“字段分割”而复杂则包含“字段分割”,这样正确吗? ...

Admin

shell脚本解释器是否优化if else链?
interpreter

shell脚本解释器是否优化if else链?

据我了解,解释器逐行运行代码;但我发现我的推理可能是错误的。如果在本示例中第一if行返回 true,则程序是否知道跳到fi后面echo "APPROVED"(并且它是否知道fi在哪一行?)或者是否仍需要一些时间来检查下一行,并且在它们出现时不执行它们里面一个elif或else? if [ $AVERAGE -ge "6" ] then echo "APPROVED" # Does shell know how to directly get from here /\... elif [ $AVERAGE -lt "2" ]...

Admin

为什么两个或多个读取命令不能一次性执行(没有某种分隔语法)?
interpreter

为什么两个或多个读取命令不能一次性执行(没有某种分隔语法)?

我尝试将以下两个命令复制粘贴到终端中直接地然后执行它们: read -s x read -s y 当前输出为空提示,但所需输出是第一次read执行,然后是第二次read执行。 我可以通过以下方法克服这个问题: read -s x && read -s y 但; 为什么两个或多个读取命令不能一次性执行(没有某种分隔语法)? ...

Admin

通过另一个解释器切换默认 shell
interpreter

通过另一个解释器切换默认 shell

所以我对 Linux 有一些经验,我总是想知道是否可以修改终端,以便它执行不同的解释器(如python)而不是默认的 shell 解释器(如sh或bash)。 (请注意,这不仅仅是“在哪里更换外壳?“ 或者 ”如何将默认 shell 从 csh 更改为 bash“。这是关于运行那些不属于贝壳,本身,但是是解释器。我以 python 为例,以使事情更清楚,但我可以轻松地说 php 或任何其他解释器。) 这可能吗?如果可以,我该怎么做? ...

Admin

bash行解释过程
interpreter

bash行解释过程

我想了解 bash 执行行解释的确切过程。 来自 GNU bash 参考手册: When a simple command is executed, the shell performs the following expansions, assignments, and redirections, from left to right. 1. The words that the parser has marked as variable assignments (those preceding the command name) and redir...

Admin

如何跟踪脚本执行事件
interpreter

如何跟踪脚本执行事件

我的目标: 当打开文件/脚本以使用文件的绝对路径(或者可能是工作目录,以解析文件的绝对路径)执行时,从内核接收事件。 我不想在每个打开的文件上获取事件。 我尝试监听跟踪点事件sched:sched_process_exec并查看进程何时是解释器,但文件名并不总是显示,当它显示时,它只是相对路径,因此我无法检查文件是否来自该类型我正在寻找(脚本)。 我知道可以选择使用 fanotify 设置 FAN_OPEN_EXEC 标志,但这仅适用于较新的内核(> 5.0),并且我也需要针对较旧的内核的一些东西(根据文档,也不确定它是否适用于文件) 。 有...

Admin

为什么“>/dev/console”用于远程蜂鸣声(回显命令)
interpreter

为什么“>/dev/console”用于远程蜂鸣声(回显命令)

我了解到这个命令: echo -e "\a" 在本地系统上触发蜂鸣声,而此命令: echo -e "\a" >/dev/console 在远程系统上触发蜂鸣声。 为什么是这样?该部分在做什么>/dev/console? 为什么echo -e "\a"在远程计算机上执行会在本地而不是远程触发蜂鸣声? 为什么“echo”-命令不喜欢 sudo ? 有类似OSI层的方案吗?请向我提供一些外部文档。 我对将 stdout/stderr 重定向到文件只有基本的了解,但问题更可能是指“Gnu/Linux/Kernel”是如何设计的,以便...

Admin

谁为只执行的文件运行解释器?
interpreter

谁为只执行的文件运行解释器?

如果当前用户对文件仅具有执行(--x)权限,则解释器(由#!/path/to/interpreter文件开头指定)在哪个用户下运行? 它不可能是当前用户,因为他没有读取该文件的权限。它不可能是 root,因为解释器中包含的任意代码都将获得 root 访问权限。 那么,解释器进程以哪个用户身份运行呢? 编辑:我认为我的问题假设该文件已经被充分读取以了解它指定的解释器,而实际上它不会走那么远。当前 shell(通常是 b/a/sh)解释执行目标文件的命令将尝试读取它,但会失败。 ...

Admin

在脚本运行时解析脚本对于 shell 来说是普遍存在的还是存在于其他解释器中?它是如何工作的?
interpreter

在脚本运行时解析脚本对于 shell 来说是普遍存在的还是存在于其他解释器中?它是如何工作的?

我一直认为 shell 会解析整个脚本,构建 AST,然后从内存中执行该 AST。然而我刚刚读到斯特凡·查泽拉斯 (Stéphane Chazelas) 的评论,并测试执行此脚本,edit-while-executing.sh: #!/bin/bash echo start sleep 10 然后在它睡觉的时候运行: $ echo "echo end" >> edit-while-executing.sh 它的作用是让它在最后打印“end”。 但是,当尝试修改此内容时: #!/bin/bash while true; do ...

Admin

使用不同的 libc/musl 解释器构建“跨 Linux 系统”程序
interpreter

使用不同的 libc/musl 解释器构建“跨 Linux 系统”程序

我的目标很简单:我想创建一个程序,以非 root 用户的身份在任何架构上引导 nix 包管理器,并且依赖尽可能少。现在,我所做的如下:我在主机上下载了一个简约的阿尔卑斯版本,具有良好的拱门。然后我解压它,并“chroot”(实际上是原始根)进入它。然后,我(在 chroot 中)安装构建的所有依赖项,使用良好的选项构建它,然后将文件复制回主机上。 但有一个重要的问题:每个系统似乎file在不同的地方都有“解释器文件”(运行时得到的文件):在我的 debian 上它位于/lib64/ld-linux-x86-64.so.2,但在 alpine 上它位于/li...

Admin

xslt shbang:从命令行使用 xslt
interpreter

xslt shbang:从命令行使用 xslt

我(愚蠢地?)写了一些中等通用的xslt 脚本。 我很想将它们转换为可执行文件,从标准或类似文件中读取 xml 文档。 使用其他语言执行此操作的方法是使用什邦。 有没有一种简单/标准的方法可以用 xsltproc 和朋友来做到这一点?当然,我可以在 xsltproc 周围编写一个包装器,以去掉第一条注释行……但是如果有一些近似标准的东西,那么使用起来会更好。 ...

Admin

脚本启动后选择解释器,例如 hashbang 内的 if/else
interpreter

脚本启动后选择解释器,例如 hashbang 内的 if/else

有没有办法动态选择正在执行脚本的解释器?我有一个在两个不同系统上运行的脚本,并且我想要使用的解释器位于两个系统上的不同位置。我最终不得不做的是每次切换时更改 hashbang 行。我想做的事情就是逻辑相当于这个(我意识到这个精确的构造是不可能的): if running on system A: #!/path/to/python/on/systemA elif running on system B: #!/path/on/systemB #Rest of script goes here 或者更好的是这样,它尝试使用第一个解释器,...

Admin

以较低的 CPU 速度运行程序?
interpreter

以较低的 CPU 速度运行程序?

runat 400mhz ./my-program --argument-of="my program"对于我来说,在具有固定(较低)CPU 时钟速度(例如,为了获得该时钟速度)的 Linux 环境中运行特定程序非常有用。 我需要它在程序的每个汇编指令之间生成延迟,如果延迟不准确(例如,如果它取决于操作系统调度程序,因为它几乎肯定会),它不会杀死我。 目标是在学校编写不太繁重的应用程序时使算法效率非常明确(拥有 3GHz CPU 使得很难注意到运行时间短且可以真正优化的缓慢算法)。此外,它也许对于实时发现竞争条件很有用。 你知道有这样的工具吗?有什么类...

Admin

在 Linux 上通过 shebang 错误解释 Perl 和 Python
interpreter

在 Linux 上通过 shebang 错误解释 Perl 和 Python

我所有的 Python 和 Perl 脚本都不是通过 shebang 解释的。绝不。但当我显式调用二进制文件时,它们会按预期工作。 我仔细检查了我的 Perl 和 Python 安装,这太奇怪了:它们的 shebang 方式执行在正常主机上的目标系统 chroot 中运行得很好,但在实际运行的系统中却不然。 我在一个自制的 Linux 系统上工作,在这个问题出现之前它运行得很好。自己看: 对“xscreensaver-text”Perl 程序进行测试,先通过 shebang,然后使用 CLI 上的解释器: $ LC_ALL=C LANG=C /usr...

Admin

为像expect这样的程序指定一个通用解释器?
interpreter

为像expect这样的程序指定一个通用解释器?

我正在编写可在多个操作系统上使用的期望脚本,但问题是 我不能到处使用#!/usr/bin/expect,所以我尝试做 #!`which expect` 在顶部但失败了 [sesiv@itseelm-lx4151 ~]$ ./sendcommand -bash: ./sendcommand: `which: bad interpreter: No such file or directory 任何解决方案。 ...

Admin