在 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 中以字符串形式执行命令 的相关文章

随机推荐

  • 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