在.zshrc中提示

时间:2015-07-02 16:19:19

标签: interactive tmux zshrc .profile

当我启动终端模拟器时,它会创建一个新的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下,如果这有所不同。)

1 个答案:

答案 0 :(得分:2)

read -p "» " choicebash语法,用于在等待用户输入之前显示提示。在zsh中,等价物是

read 'choice?» '

(也就是说,一个单词由变量名和由?加入的提示组成。引用了整个内容,但实际上只有?需要防止zsh从将这个词解释为一种模式。)