当我启动终端模拟器时,它会创建一个新的tmux会话(名为$(whoami)
),如果它已经存在,则会附加到该会话。但是,如果已经有一个活动,我希望能够选择创建一个新会话。
之前的行为是我.zshrc
脚本的一部分,所以我想我可以把额外的逻辑放在那里。这就是我在单独的脚本中提出的:
sessions=$(tmux list-sessions -F "#{session_created},#S")
sessionCount=$(echo "$sessions" | wc -l)
if (( $sessionCount > 0 )); then
now=$(date +%s)
echo -e "Attach to an existing session, or start a new one:\n"
# List sessions in reverse chronological order
echo "$sessions" | sort -r | while read line; do
created=$(cut -f1 -d, <<< $line)
session=$(cut -f2 -d, <<< $line)
age=$(bc <<< "obase=60;$now - $created" | sed "s/^ //;s/ /:/g")
echo -e "\t\x1b[1;31m$session\x1b[0m\tcreated $age ago"
done
echo
read -p "» " choice
else
# Default session
choice=$(whoami)
fi
exec tmux -2 new-session -A -s $choice
模拟会话附件,这是有效的。但是,当放入我的.zshrc
时,不会工作。 read
行会出错:
read: -p: no coprocess
问题是什么?
(这是在OS X下,如果这有所不同。)
答案 0 :(得分:2)
read -p "» " choice
是bash
语法,用于在等待用户输入之前显示提示。在zsh
中,等价物是
read 'choice?» '
(也就是说,一个单词由变量名和由?
加入的提示组成。引用了整个内容,但实际上只有?
需要防止zsh
从将这个词解释为一种模式。)