1

这个问题之后,改变问题,编写 Yad 笔记本脚本的另一种方法如下。这删除了&​​fromres1 &和异步操作。

正如@Barmar 所述,“脚本按顺序运行,而无法同时启动多个变量分配并等待不同的窗格获得响应。” 这大概就是这个问题的答案。

这是一种解决方案,但它会为两个 Yad 窗格的输出创建一个文件。可以是tee -a第二个窗格上的一个文件并使用 sed 修剪字符吗?不是最优雅的解决方案。它在字符数上失败。

#!/bin/bash
#ifs.sh

# no AT bridge
    export NO_AT_BRIDGE=1

# yad notebook key
    key=$RANDOM

# system management tab 
    sysvar=$(yad --plug=$key --tabnum=2 --form --columns=1 --editable --separator='' \
        --text="<b>Text</b>" \
        --field="Threads":NUM \
            '3!1..4!1!0' \
        --field="Memory":SCL \
            '50!10..100!1!0' | tee 0 ) &> res2 &

    provar=$(yad --plug=$key --tabnum=1 --form  --columns=1 --editable --separator='' \
        --text="<b>Text</b>" \
        --field="Format":CB \
            'RAW!OTHER' \
        --field="Calibrate":CHK \
            'TRUE!FALSE' | tee 1 )  &> res1 &

    yad --notebook --key=$key --center --tab="<b>Process and options</b>" --tab="<b>System settings</b>" \
        --text="Text" \
            --title="Asterism" \
        --buttons-layout=spread \
        --button=Quit:1 \
        --button=Process:0 2>/dev/null 

    ret=$?

    if [ $ret -eq 0 ]; then

    value=`cat 0`
    values=`cat 1`

    processors=$(echo "$value" | sed s'/.........$//')
    memlimit=$(echo "$value" | sed 's/^........//')

    echo $processors $memlimit

    raw=$(echo "$values" | sed s'/.....$//')
    cal=$(echo "$values" | sed 's/^...//')

    echo $raw $cal

    fi
exit

而且,这是输出...

+ sysvar=3.00000050
+ provar=RAWFALSE
+ ret=0
+ '[' 0 -eq 0 ']'
++ cat 0
+ value=3.00000050
++ cat 1
+ values=RAWFALSE
++ echo 3.00000050
++ sed 's/.........$//'
+ processors=3
++ echo 3.00000050
++ sed 's/^........//'
+ memlimit=50
+ echo 3 50
3 50
++ echo RAWFALSE
++ sed 's/.....$//'
+ raw=RAW
++ echo RAWFALSE
++ sed 's/^...//'
+ cal=FALSE
+ echo RAW FALSE
RAW FALSE
+ exit
4

1 回答 1

1

编辑:这是使用 sed 的 bash 解决方案。将 yad 输出写入文件并使用 sed 进行编辑,而不是尝试从 yad 字符串创建变量 - 没有意义。

编辑:使用剪切https://stackoverflow.com/a/52055600/5057161

#!/bin/bash
#ifs.sh

# no AT bridge
    export NO_AT_BRIDGE=1

# yad notebook key
    key=$RANDOM

# system management tab 
    yad --plug=$key --tabnum=2 --form --columns=1 --editable --separator=':' \
        --text="<b>Text</b>" \
        --field="Threads":NUM \
            '3!1..4!1!0' \
        --field="Memory":SCL \
            '50!10..100!1!0' > sys | > res2 |

    yad --plug=$key --tabnum=1 --form  --columns=1 --editable --separator=':' \
        --text="<b>Text</b>" \
        --field="Format":CB \
            'RAW!OTHER' \
        --field="Calibrate":CHK \
            'TRUE!FALSE' > pro | > res1 |

    yad --notebook --key=$key --center --tab="<b>Process and options</b>" --tab="<b>System settings</b>" \
        --text="Text" \
            --title="Asterism" \
        --buttons-layout=spread \
        --button=Quit:1 \
        --button=Process:0 2>/dev/null

    ret=$?

    if [ $ret -eq 0 ]; then

    thd=$(echo | sed 's/.......:.*//' < sys)
    mem=$(echo | sed 's|........:||;s/:$//' < sys)

    img=$(echo | sed 's/:.*//' < pro)
    cal=$(echo | sed 's/:$//;s|.*:||' < pro)

    fi

    rm sys pro
exit
于 2018-08-26T22:39:45.593 回答