【问题标题】:How can I use a line break in a csh script "eval" statement如何在 csh 脚本“eval”语句中使用换行符
【发布时间】:2016-04-02 14:36:13
【问题描述】:

这是一个示例脚本:

#!/bin/csh
set cmd="echo hello\ndude"
eval $cmd

输出:

hellondude

期望的输出:

hello
dude

eval 语句没有正确处理换行符。

我怎样才能让这项工作如我所愿?

【问题讨论】:

  • \n 在常规字符串中没有意义。
  • ...坦率地说,如果它已经正确处理了换行符,它将回显hello,然后给你一个命令-不-发现错误,除非您有一个名为 dude 的可执行文件。
  • 另外,csh 是一个非常、非常设计不佳的外壳;有很多它根本不允许你做。有关密切相关的问题,请参阅stackoverflow.com/questions/9980537/…
  • @CharlesDuffy 我实际上希望它按照您的第二条评论所建议的那样执行。我正在尝试发出一个将挂起的命令,除非您在执行后按回车键。我想诱使 shell 认为命令已发出,然后按回车键。
  • 如果我可以在命令末尾添加一个新行,理论上它应该可以工作,但eval 似乎不喜欢这样。

标签: newline eval line-breaks csh


【解决方案1】:

在你的评论中你说.. “我正在尝试发出一个将挂起的命令,除非您在执行后按回车键。”

因此,基于此以及我可以从您的原始帖子中收集到的信息,我认为您只需要一个分号而不是一个新行,并且第二个命令可以从标准输入中读取一个字符,如下所示...

set cmd='echo hello; set a = $<'
eval $cmd

这将执行第一个命令“echo hello”,然后等待键盘输入,或者如您所说的“挂起”。

【讨论】:

  • 问题是我不希望它等待用户输入。我希望它表现得好像用户自动按 Enter 键一样。
  • 在这种情况下,只需使用分号... set cmd="echo hello;dude"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多