在 Bash 中以字符串形式执行命令

2023-12-27

我正在测试一个简短的 bash 脚本。我想将字符串作为命令执行。

#!/bin/bash

echo "AVR-GCC"
$elf=" main.elf"
$c=" $main.c"
$gcc="avr-gcc -mmcu=atmega128 -Wall -Os -o $elf$c"
eval $gcc
echo "AVR-GCC done"

我知道它很丑陋,但它不应该执行 avr-gcc 命令吗? 错误如下:

./AVR.sh: line 4: = main.elf: command not found
./AVR.sh: line 5: = .c: command not found
./AVR.sh: line 6: =avr-gcc -mmcu=atmega128 -Wall -Os -o : command not found

我不知道你的最终目标是什么,但你可能会考虑使用以下更强大的方法:在 bash 中使用数组。 (我不会讨论脚本中的几个语法错误。)

不要像以前那样将命令及其参数放入字符串中,然后eval字符串(顺便说一句,在你的情况下, eval 是无用的)。我将您的脚本理解为(与您的版本相比,此版本不会给您提到的错误,特别是变量分配没有美元符号):

#!/bin/bash

echo "AVR-GCC"
elf="main.elf"
c="main.c"
gcc="avr-gcc -mmcu=atmega128 -Wall -Os -o $elf $c"
eval $gcc
echo "AVR-GCC done"

你很快就会遇到问题,例如,当你遇到带有空格或有趣符号的文件时(想想一个名为; rm -rf *)。反而:

#!/bin/bash

echo "AVR-GCC"
elf="main.elf"
c="main.c"
gcc="avr-gcc"
options=( "-mmcu=atmega128" "-Wall" -"Os" )
command=( "$gcc" "${options[@]}" -o "$elf" "$c" )
# execute it:
"${command[@]}"

尝试了解这里发生的情况(我可以澄清您要求我澄清的任何具体要点),并意识到它比将命令放入字符串中安全得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Bash 中以字符串形式执行命令 的相关文章

  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • Bash 脚本:自动为 mpeg-dash 进行 ffmpeg 编码

    我正在编写一个 bash 文件来创建视频编码和串联 以供 dash 实时流媒体使用 基本上 它读取输入视频文件夹 将所有视频编码为三种分辨率格式 然后将它们连接起来创建三个适应集 DIAGRAM 该脚本检查 fps 一致性 如果输入不是 1
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • Linux 上的基准测试程序

    对于一项任务 我们需要使用不同的优化和参数来对我们的实现进行基准测试 有没有一种可行的方法可以在Linux命令行 我知道时间 上使用不同的参数对小程序进行基准测试 从而为我提供CSV或类似内容的时间数据 输出可能类似于 Implementa
  • 如何在不同目录中启动多个窗口的 tmux?

    我想使用脚本打开一个有 6 个窗口的 tmux 会话 每个窗口位于不同的目录中 我开始于我找到的一个脚本 http blog hawkhost com 2010 07 02 tmux E2 80 93 the terminal multip
  • 警告:请求的映像平台 (linux/amd64) 与检测到的主机平台 (linux/arm64/v8) 不匹配

    警告 请求的映像平台 linux amd64 与检测到的主机平台 linux arm64 v8 不匹配 并且未请求特定平台 docker 来自守护程序的错误响应 无法选择具有功能的设备驱动程序 gpu 我在 mac 上尝试运行此命令时遇到此
  • 使用 plistBuddy 获取值数组

    var keychain access groups declare a val usr libexec PlistBuddy c Print var sample plist echo val echo val 0 Ouput Array
  • Awk - 计算两个文件之间的每个唯一值和匹配值

    我有两个文件 首先 我尝试获取第 4 列中每个唯一字段的计数 然后匹配第二个文件的第二列中的唯一字段值 File1 第 4 列的每个唯一值和 File2 第 2 列包含我需要在两个文件之间匹配的值 所以本质上 我试图 gt 如果 file2
  • 如何使用 sed 将空格替换为 \(space)?

    当我使用 sed 将所有空格替换为 X 时 该命令有效 命令为 sed s X g filelist tmp 但是 当我尝试用 space 替换所有出现的空格时 代码是 sed s g filelist tmp 这不起作用 我究竟做错了什么
  • awk 的 printf 插入多个变量的正确语法是什么?

    我复制了一些使用 printf 输出字符串在文件中出现的频率的代码 awk BEGIN print The number of times a appears in the file a a counter 1 END printf s n
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • 后台分叉无法正常工作[重复]

    这个问题在这里已经有答案了 我运行这个程序 在前景和背景中 int main int pid printf App Start pid d n getpid while 1 pid fork if pid 0 printf Child n
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen

随机推荐

  • Google OAuth2 通过 cURL (PHP) 返回“unsupported_grant_type”

    我想获取有关谷歌帐户的数据 我使用下一个代码 curl curl init curl setopt array curl array CURLOPT URL gt https www googleapis com oauth2 v4 tok
  • Ext.onReady() 与 $(document).ready()

    有什么不同 我有 document ready 函数 它应该检查 extjs 是否已加载 但主要问题是 extjs 没有按时加载 并且 document ready 内部的内容开始执行 extjs 创建函数会产生主要错误 无法在 Ext c
  • 删除已删除远程的远程跟踪分支

    如果我从我的存储库中删除一个遥控器 假设我删除了该遥控器origin 有没有一种快速方法可以删除该遥控器的所有远程跟踪分支 我知道git branch dr 但据我所知 我必须为每个跟踪分支执行一次此操作 还有git remote prun
  • 当suppressMarkers设置为true时,Google地图路线拖动变得不稳定

    我有一个谷歌地图 我可以在源路线和目的地路线之间添加多个点 停靠点 航点 创建路线 google maps DirectionsService 并放置在地图上 google maps DirectionsRenderer 后 您可以拖动路线
  • 将子域从 Route53 指向 CloudFront,而不使用 CNAME

    我有一个子域 dev example com 我需要将其指向我的 cloudfront 发行版 xyz cloudfront net 我做了以下步骤 1 创建了cloudfront发行版 创建云前端分发时 未在 Cname 字段中指定任何内
  • 无法使 Laravel 4 在本地主机上运行

    在阅读 Laravel4 beta 发布的公告后 我第一次尝试 Laravel 我跟着这些步骤 http four laravel com 我安装了 Composer 和 Laravel 及其所需的所有依赖项 我把 laravel 放进去
  • Maven 的 versions:display-dependency-updates 的 Ivy 等价物是什么?

    我有一个 ivy xml 文件 在其中明确指定我的依赖项 Ivy 中是否内置了任何功能 可以让我发现或自动更新过时的依赖项 我不想使用latest release 因为我想要一个完全稳定且可重现的构建 但每隔一段时间我就会想要更新一些依赖项
  • 现在,Arc Welder 无法在 Windows 上启动测试应用程序

    昨天 2015 年 10 月 19 日下午 06 00 ARC Welder 应用程序开始无法启动应用程序 由于某种原因 现在 当我单击 测试 时 Windows 10 上没有任何反应 我也在 MAC Windows 7 上进行了测试 并且
  • 执行 static_assert 模板类型是另一个模板

    我如何static assert像这样 如果 Boost 不支持 C 或 C 11 中的新功能 也许 Boost 支持它 template
  • 铸造未知类型的节点

    在使用 Neo4j 时 我能够创建带有标签的节点数组 然后在这些节点之间创建关系 这些标签本质上是到我的 POCO 的映射 Dog 标签与 C 中的 Dog POCO 相关 并且这些 POCO 从仅包含 ID 属性的简单基本 POCO 实现
  • 特定 bin 内 numpy 数组的元素数量

    我有一个乐团sorted 一维 数组长度不等 say M0 M1 and M2 我想找到每个数组有多少个元素在特定数字范围内 其中数字范围由另一个已排序数组的相邻元素 say zbin 我想知道什么是最快的方式为了达成这个 在这里 我给出了
  • MediaStore.Images.Media.insertImage 之后的文件名

    我在用MediaStore Images Media insertImage ContentResolver cr String imagePath String name String description 功能将新创建的图像插入到图库
  • Intersystems caché - 以编程方式创建新类

    是否可以编写 ObjectScript 方法 该方法将在命名空间中创建新类并编译它 我的意思是以编程方式创建新类并存储它 如果是这样 我可以稍后使用 ObjectScript 编辑此类 并重新编译 吗 原因 我在字符串变量中定义了类结构 我
  • Laggy Lazy Column Android Compose

    我已经创建了一个完整的应用程序Jetpack 组合 然而 现场的表演Lazy Column非常糟糕 而且没有任何意义 Lazy Column应该是替代RecyclerView but RecyclerView目前效果好多了 我制造了一个La
  • 测量 flutter 应用程序启动时间

    我正在寻找某种方法来测量应用程序的启动时间 从单击应用程序图标的那一刻直到用户可以看到登录页面的那一刻 Run flutter run trace startup profile 跟踪输出保存为名为的 JSON 文件start up inf
  • 如何使用 monodroid 将应用程序添加到“共享”菜单

    我的解决方案基于这篇文章 http twigstechtips blogspot com 2011 10 android sharing images or files through html http twigstechtips blo
  • 字体粗细

    我正在使用购买字体 Museo Sans 作为我正在开发的应用程序中的自定义字体 我购买时给我的文件包含不同粗细的网络字体文件 MuseoSans100Regular MuseoSans300Regular 等 font face 中有没有
  • 链接到没有锚标记的网页上的任意内容

    我正在寻找一种方法来链接到网页上特定范围的单词 图像或其他任意内容 一种替代方法是在页面上引入大量锚点 但我可以接受需要 JavaScript 的解决方案 最好也是突出目标内容的一种 如果页面内容已被修改并且链接不再有效 那么最好有某种保护
  • 污染 $scope 对象会影响性能吗?

    我有一个控制器 其中 scope 对象用于存储仅在同一控制器中本地使用的方法和值 有很多这样的事情正在发生 scope foo something scope bar something else 等等 这些值均未在视图中使用 我的问题是污
  • 在 Bash 中以字符串形式执行命令

    我正在测试一个简短的 bash 脚本 我想将字符串作为命令执行 bin bash echo AVR GCC elf main elf c main c gcc avr gcc mmcu atmega128 Wall Os o elf c e