【问题标题】:Bash array as argument inside of screenBash 数组作为屏幕内的参数
【发布时间】:2012-10-31 03:10:55
【问题描述】:

下面的代码没有像我预期的那样工作。我可能是因为我做错了,但我认为这可能是一个引用问题。

    #!/bin/bash 

    IFS=$'\n' 
    fortune_lines=($(fortune | fold -w 30))
    Screen_Session=$(mainscreen)
    Screen_OneLiner=$(screen -p 0 -S ${Screen_Session} -X stuff "`printf "say   ${fortune_lines[@]}\r"`")

    for var in "${Screen_OneLiner[@]}"
      do
        echo "${var}"
    done

我认为我没有正确引用某些内容,因为当我尝试执行此操作时。我明白了。。

    line 5: mainscreen: command not found
    [screen is terminating

基本上我正在尝试添加此功能(有效)

    IFS=$'\n' 
    fortune_lines=($(fortune | fold -w 30))

到这个屏幕一个班轮

   screen -p 0 -S ${Screen_Session} -X stuff "`printf "say   ${fortune_lines[@]}\r"`"

然后让它循环数组

    for var in "${ArrayName[@]}"
   do
      echo "${var}"

   done

所以我不确定我(在代码中)我想要做的事情有多远。任何帮助都会很棒。

【问题讨论】:

标签: arrays bash function loops gnu-screen


【解决方案1】:

由于对mark a comment as an answer 的功能请求仍然被拒绝,我在此处复制上述解决方案。

我设法让它工作...gist.github.com/4006586 – user1787331

【讨论】:

    【解决方案2】:

    这行有问题

    Screen_Session=$(mainscreen)
    

    您在此处使用命令替换,因此如果 mainscreen 不是有效命令,您将收到 command not found 错误。

    也许您的意思是使用大括号而不是括号?

    【讨论】:

    • 我为您应用了更改。 (顺便说一句,谢谢!)事情似乎正在正确扩展,但循环只打印我数组中的第一行,而不是整个索引。有什么建议吗?
    • 循环正确。我猜Screen_OneLiner 包含一个字符串而不是一个数组。将 $(..) 括在括号中可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 2023-04-10
    • 2010-11-06
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多