我有以下脚本:
#!/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会话。
感谢您的帮助!
答案 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创建一个脚本来执行相同操作...并运行它。