Подскажите в.zshrc

Когда я запускаю свой эмулятор терминала, он либо создает новый сеанс 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 ответ

Решение

read -p "» " choice является bash синтаксис для отображения подсказки перед ожиданием ввода пользователя. В zshэквивалент

read 'choice?» '

(То есть одно слово, состоящее из имени переменной и подсказки, объединенной ?, Все это цитируется, хотя на самом деле только ? должно быть, чтобы предотвратить zsh от интерпретации слова как шаблона.)

Другие вопросы по тегам