将(cd /& ls)命令作为变量传递给bash脚本

时间:2014-06-15 15:06:22

标签: python linux bash unix

这是我的名为ooo的bash脚本

#!/bin/bash
$1

这是命令

/ ooo' echo test'

输出是:

test

效果很好。但是试试吧..

/ ooo' cd /&& LS'

现在没有输出。

为什么没有输出?

2 个答案:

答案 0 :(得分:2)

如果你的问题是"我怎么做我期望在这里发生的事情?",那么@ ooga的答案是完美的。

如果您的问题是"为什么这不符合我的预期?",那么答案会更加微妙。

我认为正在发生的事情(以及bash规则是错综复杂的,所以我在这里并非100%肯定)是

  • $1被解析为一个单词的简单命令' (请参阅bash联机帮助页) - 一个单词只是$1,扩展中的&&不可见(特别是没有达到预期效果),因为该参数尚未扩展。
  • 然后将这个简单的命令分成单词。当然,只有一个单词'在这里,所以这一步很简单。
  • 然后展开参数,以提供单词" cd / && ls"
  • 然后" Word拆分:shell扫描参数扩展,命令替换和算术扩展的结果,这些结果在双引号内没有出现用于分词。" (bash手册页)
  • 然后将此单词分为四个单词," cd"," /"," &&& #34;和" ls"
  • 然后"命令执行:    将命令拆分为单词后,如果它生成一个简单的命令和一个可选的参数列表,则会执行以下操作。[...]"
  • 因此命令cd以下面三个单词作为参数运行。这意味着,正如William Pursell在他对你的问题的评论中指出的那样,cd有三个论点,其中两个是忽略的。

如果您使用

运行脚本
./ooo 'echo / && ls'

你会看到这种情况发生,并且看到明显魔术&&被传递给echo命令只是一个普通的字符串。

答案 1 :(得分:1)

试试这个:

#!/bin/bash
eval "$1"