A diferença é que quando você chama a partir da linha de comando, você está usando bash
como o interpretador. Quando você chama de .zshrc
, você está usando zsh
como o interpretador. Eu sei que você está usando zsh
como o intérprete ao correr de ~/.zshrc
porque o comportamento que você descreve é o comportamento daquele shell.
Infelizmente, sua pergunta deixa de fora uma informação bastante crítica sobre como você está chamando o script. Há várias maneiras de fazer isso, mas nenhuma delas tem diferença de comportamento quando executada a partir da CLI ou de outro script (a menos que você tenha alguma configuração esotérica, como bash
binary em $PATH
, que na verdade é zsh
ou alguma outra tolice). Algumas formas comuns:
-
/path/to/script
- usará o interpretadorbash
. Mais especificamente, usará/bin/sh
. Seu shebang (a primeira linha) está quebrado. Precisa ser#!/usr/bin/env
, não#/usr/bin/env
. -
bash /path/to/script
- usarábash
intérprete. -
zsh /path/to/script
- usarázsh
intérprete. -
. /path/to/script
- usará o interpretadorzsh
(supondo que seja o shell ativo).
Agora você também pode consertar seu script para que ele funcione corretamente em ambos os shells. A correção é usar uma matriz, e não uma string, para armazenar os valores obtidos de tmux list-sessions
.
TMUX_SESSIONS=( $(tmux list-sessions -F "#S") new )
echo "${TMUX_SESSIONS[@]}"
echo "Which tmux session, or enter string for a new one";
select TMUX_SESSION in "${TMUX_SESSIONS[@]}"; do