在bash脚本中等待env加载到tmux会话中

时间:2018-03-01 17:07:33

标签: shell sh tmux

我有以下脚本:

#!/bin/sh
# Startup tmux session, activate env inside session, wait, execute invoke command

DIR=$(echo $DIR_HOME)
CLOUD=$'cloud_sql'

tmux new -s $CLOUD -d
printf "Starting: $CLOUD \n"
tmux send-keys "cd $DIR_HOME" C-m
tmux send-keys 'pipenv shell' C-m
printf 'Env Started! \n'
if [[ "-z ${ENV_ACTIVE}" ]]; then
  tmux send-keys -t $CLOUD "wait 15" C-m
  tmux send-keys -t $CLOUD 'inv gce.cloud-sql-proxy -p 5432' C-m
else
  tmux send-keys 'Server not ready!'
fi
printf "$CLOUD started.  Attach using: \n\n"
printf "tmux attach -t $CLOUD \n\n"

exit 0

我希望pipenv shell命令在运行inv gce.cloud-sql-proxy ..之前(在tmux会话内)完成但由于某种原因我看到它在激活{{1}之前/期间执行这些命令} ..

另一方面,如果我在if语句之前添加了pipenv shell,它似乎可以工作,虽然这是理想的,并且想要在完成时退出tmux会话。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我有同样的问题,对我来说是:

tmux send-keys "pipenv shell" C-m
tmux send-keys "python run.py" C-m

我通过将以下内容附加到我的Pipfile来解决它:

[scripts]
serve = "python run.py"

然后我将我的tmux改为:

tmux send-keys "pipenv run serve" C-m

这会运行名为serve的脚本,即使用env运行程序而无需先加载它。您可以通过在Pipfile中为inv gce.cloud-sql.proxy创建一个脚本来执行相同操作...并运行它。