【问题标题】:Stuck with weird thing happening in shell scripting卡在 shell 脚本中发生的奇怪事情
【发布时间】:2019-06-17 15:19:46
【问题描述】:

所以我试图从tmux ls 获取会话,输出是这样的:

mc: 1 windows (created Mon Jun 17 15:53:39 2019) [108x37]
test: 1 windows (created Mon Jun 17 15:53:55 2019) [108x37]

所以我在脚本中将它传递给 grep,但我猜它会尝试执行它,

#!/bin/sh

tmux ls | while read x;
do
        TEST=$("$x" | grep -P '^.*?:')
        echo "$TEST"
done

输出是这样的:

root@server0:/home/mc# ./test.sh
./test.sh: 5: ./test.sh: mc: 1 windows (created Mon Jun 17 15:53:39 2019) [108x37]: not found

./test.sh: 5: ./test.sh: test: 1 windows (created Mon Jun 17 15:53:55 2019) [108x37]: not found

谁能告诉我这个问题?我找不到任何解决方案,因为我不知道该搜索什么问题。

【问题讨论】:

  • 您收到该错误消息是因为您尝试执行从tmux ls 输出读取的行而不是打印它,但您遇到的问题不止于此。您的脚本的具体预期输出是什么? edit 将您的问题展示出来,以便我们为您提供最好的帮助。
  • 不确定但不应该是$(echo "$x" | grep -P '^.*?:')
  • @LawrenceCherone 这会阻止他收到当前的错误消息,但仍然会让他对他想做的任何事情采取错误的方法。
  • 使用tmux ls -F "#S"输出just会话名称;那么你根本不需要使用grep

标签: shell grep sh


【解决方案1】:

您收到该错误消息是因为您尝试执行从tmux ls 输出读取的行而不是打印它,但您遇到的问题不止于此。

目前尚不清楚您要做什么,但如果要从您显示的tmux ls 输出中获取mctest,那就是:

tmux ls | cut -d':' -f1

假设 tmux ls 没有仅输出这些值的选项(查看手册页)。

如果这不是您所需要的,那么编辑您的问题以提供更清晰的要求以及您发布的示例输入的预期输出。

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-06-19
    • 1970-01-01
    • 2011-12-05
    • 2011-11-25
    • 2017-01-26
    相关资源
    最近更新 更多