2014-01-15 33 views
0

我需要導出bash函數以用於下例。請注意,我的例子 中的函數體被簡化了。實際情況比較複雜。我不想在發送鍵參數中寫出整個 函數體。tmux:更新bash函數的環境

#!/bin/bash 

TMUX_SESSION="experiment"      
LOG_FILENAME="_log"         

exec_commad() { 
    run_my_commad_that_produces_log_messages > $LOG_FILENAME 
} 

watch_errors() { 
    tail -F ${LOG_FILENAME} | grep -E ' (WARNING|ERROR|CRITICAL) ' 
} 

tmux new-session -d -s "$TMUX_SESSION" 
tmux send-keys "exec_commad" 'C-m'                    
tmux split-window -v               
tmux send-keys "watch_errors" 'C-m'    

tmux -2 att -t $TMUX_SESSION 

想法是讓

set-option -ga update-environment ' exec_commad watch_errors' 

作品也不僅與變量的函數。

+0

函數的源不是不幸的是,環境的一部分。我從來沒有使用過tmux,所以我不知道是否有更好的方法,但我可以建議簡單地將您的命令放在單獨的腳本中,並簡單地調用這些腳本文件? – falstro

+0

@roe是的,但我的例子非常簡單。我有更多的功能,而不僅僅是兩個(對於更多的tmux窗口) - 哪些更多 - 整個腳本是爲單一用法生成的。將函數存儲在單獨的文件中會使問題複雜化(例如:何時刪除這些節奏文件?)。欲瞭解更多信息,我的目標是製作一個工具,在tmux下運行帶有自我監控(持續時間,分析日誌文件,cpu/memory,...)的命令。 –

+0

您可能需要首先使用'export -f exec_command watch_errors'顯式導出函數。 'bash'基本上將函數定義映射爲'()= {...}'形式的單個字符串,並將其分配給與函數具有相同名稱的變量。其他'bash'炮彈可以從這種環境「變量」重建功能。 – chepner

回答

0

一個想法是在一個文件中定義的功能,並在TMUX會議文件與send_keys

tmux send-keys -t<whatever>:<pane> ". <path to function definitions>" C-m