【问题标题】:Bash Command Substitution as ParameterBash 命令替换为参数
【发布时间】:2020-01-03 14:01:39
【问题描述】:

在我和朋友们一起解决了一个具有挑战性的问题之后,我有了一个想法来做一个盲目的命令替换。

这个单引号,

pid='1024 --help `touch /tmp/helw`' piduser=$(ps -ouser -p$pid h)

不创建文件 /tmp/helw

但是这个用双引号,

pid="1024 --help `touch /tmp/helw`" piduser=$(ps -ouser -p$pid h)

创建文件。

我的问题是,我如何进行命令替换而不让它在 pid - 变量中运行,但在 piduser 变量中运行。

【问题讨论】:

  • 你可能不得不使用eval,但你为什么关心touch在piduser被定义之前运行?
  • 就此而言,您希望从touch 获得什么输出?
  • 投票结束,因为不清楚。你到底希望在这里完成什么?
  • 应该是脚本测试。通常 piduser 正在脚本中执行。我只有通过从外部注入来影响 pid 的唯一方法。
  • 我不希望有任何输出。但是这个必须从内部完美执行,所以我摆脱了它。欢迎任何像触摸这样的执行。它只是一个没有看到任何消息的测试。

标签: linux bash command substitution


【解决方案1】:

首先,不要。单独的操作可以而且应该是单独的操作。

touch /tmp/helw && ...

...但是如果出于某种奇怪的原因这实际上是必要的(我无法想象为什么),在 $(...) 内完成的任何事情都是一个子shell,可以是多个命令。

pid='1024 --help ' piduser=$( touch /tmp/helw && ps -ouser -p$pid h )

【讨论】:

  • 实际上 piduser 变量在脚本中。例如称为 testme。 pid="1024..." ./testme 应该会产生效果。命令替换应在此脚本中运行,如开头所述。
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 2012-02-19
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2017-01-13
相关资源
最近更新 更多