我有一个启动TMUX进程的file.sh:
if tmux new -d -c ${INSTALL_DIR} -s ${TMUX_SESSION} bin/${SERVER} --port ${PORT} --galaxy-name ${GALAXY} --max-players ${MAX_PLAYERS} ${PARAMS} 2> /dev/null
then
目前,所有这些变量都可以在文件顶部找到:
MAX_PLAYERS=20
GALAXY=GalaxyName
#etc
我试图将一些变量推送到另一个文件,以便当我将更新推送到file.sh时我不会覆盖客户端自定义变量 问题是当尝试从file-config.sh中引入这些变量时,tmux启动的进程立即被终止
尝试将这些变量拉入时:
source ./file-config.sh
在这里我可以致电echo ${GALAXYNAME}
并且它有效。
但是,在运行上面列出的TMUX
命令后,我立即运行:
如果pidof $ {SERVER}>的/ dev / null的;
总是失败,这个过程会马上被杀死。
我也尝试过如下使用cat
和grep
:
MAX_PLAYERS=$(grep MAX_PLAYERS= ./file-config.sh | sed -e 's/#.*//' -e 's/.*=//')
GALAXY=$(grep GALAXY= ./file-config.sh | sed -e 's/#.*//' -e 's/.*=//')
其结果与以前相同。我可以回应变量,但TMUX
进程被终止。
我想说清楚,如果变量位于file.sh的顶部并且我没有尝试从另一个文件中引入它们,则脚本按预期工作100%。只有当我试图从另一个来源引入变量时,它才会自行终止。
修改
关于使用bashes调试模式的注释我发现在两种情况下,变量在它们的末尾都有\r
,导致它们破坏了TMUX
命令。
我可以通过向每个变量添加sed -e 's/\r//g'
来删除它,但我不确定从源变量中删除\r
的最佳方法
source filename
variable=$($variable | sed -e 's/\r//g)
有更好的选择吗?