带引号的 tmux 脚本

tmux script with quotes

我在 bash 中使用的 tmux 脚本具有以下代码:

tmux send-keys -t d4 'tmux send-keys -t "server1 tail -F /var/log/file.log | grep --line-buffered keyword | egrep --line-buffered "Two keywords" | /root/another_app" ENTER' ENTER

当行传递给tmux时,"Two keywords"Twokeywords中转换。

我试过转义引号但无济于事。

同样的情况也发生在一条更复杂的线路上,即:

tmux send-keys -t d4 'tmux send-keys -t server2 "tail -F /var/log/file2.json | grep --line-buffered -a '"event_type":"keyword"' | /root/another_app" ENTER' ENTER

转义引号也不走运。

我的 objective 是将第一行发送到 tmux 为:

tail -F /var/log/file.log | grep --line-buffered keyword | egrep --line-buffered "Two keywords"

第二行为

tail -F /var/log/file2.json | grep --line-buffered -a '"event_type":"keyword"'

请试试这个:

tmux send-keys -t d4 'tmux send-keys -t "server1 tail -F /var/log/file.log | grep --line-buffered keyword | egrep --line-buffered '"'Two keywords'"' | /root/another_app" ENTER' ENTER

因为:

echo 'tmux send-keys -t "server1 tail -F /var/log/file.log | grep --line-buffered keyword | egrep --line-buffered '"'Two keywords'"' | /root/another_app" ENTER'
tmux send-keys -t "server1 tail -F /var/log/file.log | grep --line-buffered keyword | egrep --line-buffered 'Two keywords' | /root/another_app" ENTER

确定最后有两个 ENTER 吗?

对于第二个,您可以使用此处文档将您的特殊 tmux 参数分配给一个变量,然后使用该变量调用您的 tmux:

var=$(cat <<SETVAR
'tmux send-keys -t server2 "tail -F /var/log/file2.json | grep --line-buffered -a '"event_type":"keyword"' | /root/another_app" ENTER'
SETVAR
)
echo "$var"
'tmux send-keys -t server2 "tail -F /var/log/file2.json | grep --line-buffered -a '"event_type":"keyword"' | /root/another_app" ENTER'

那就试试吧

var=$(cat <<SETVAR
'tmux send-keys -t server2 "tail -F /var/log/file2.json | grep --line-buffered -a '"event_type":"keyword"' | /root/another_app" ENTER'
SETVAR
)
tmux send-keys -t d4 "$var" ENTER