【问题标题】:Is there any way to run Bash from Groovy有什么方法可以从 Groovy 运行 Bash
【发布时间】:2019-08-03 12:37:18
【问题描述】:

我有这个来自 bash 的 for 循环并试图将其翻译成 groovy 语言,但我不知道如何..请帮助..

for i in $(ls *.fastq.gz | rev | cut -c 10- | rev | uniq)
do
echo $i;
mkdir $i;
done

【问题讨论】:

  • 您遇到了什么问题?
  • @thatotherguy 我从 bash 脚本中得到了类似的东西,试图将其翻译成 groovy,但不知道如何......
  • 你尝试了什么,你在哪里卡住了?
  • 我最后一次尝试是 for (i = $(ls *.fastq.gz | rev | cut -c 10- | rev | uniq))
  • 转义文字美元符号 "\$5" 或将值表达式括起来 "${5}" ,所以尝试了两者但仍然得到相同的错误。

标签: bash for-loop groovy


【解决方案1】:

虽然要求人们为您编写脚本不是 StackOverflow 的主题,但像“如何从 Groovy 运行多行 Bash 命令?”之类的特定问题。不是,您可以这样做:

$ cat foo.groovy
println (['bash', '-c', '''

for i in $(ls *.fastq.gz | rev | cut -c 10- | rev | uniq)
do
  echo $i;
  mkdir $i;
done

'''].execute().text)

$ touch mytestfile.fastq.gz
(no output)

$ groovy foo.groovy
mytestfile

$ ls -ld mytestfile
drwxr-xr-x. 1 myuser users 0 Mar 13 09:36 mytestfile

$ groovy --version
Groovy Version: 1.8.9 JVM: 1.8.0_191 Vendor: Oracle Corporation OS: Linux

这不如在 Groovy 中本地实现它好,但当您不熟悉该语言时,工作量会大大减少。

【讨论】:

  • 感谢您的帮助,但恐怕我仍然收到错误消息:ERROR ~ 美元符号后非法字符串正文字符;
  • 您能否确认您完全复制了它,并且您没有尝试使用双引号代替单引号?
  • 是的,我仔细检查了 :( 用单引号完全复制了它。
  • @Jason 我从我的终端复制粘贴了一个完整的示例。你介意做同样的事情吗(或者把它放在一个pastebin中,或者编辑问题以将它作为你尝试过的东西包含在内)?请确保获得完整的未缩写错误消息,而不仅仅是错误字符串本身,并且代码位于一个全新的文件中,其中没有任何其他内容(以防问题是以前的剩余尝试)
  • 抱歉回复晚了。我不知道为什么它给了我同样的错误,试图排除故障,但没有运气。现在想出了另一种绕过这个的方法。感谢您的帮助!
【解决方案2】:

类似的东西,但是我不知道所有 bash 命令:

new File('/my/dir').listFiles( {it.name.endsWith('.fastq.gz')} as FileFilter ).each{
    println it
    it.mkdirs() //however this will fail because file with same name exists
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 2020-03-06
    • 2016-08-31
    相关资源
    最近更新 更多