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ábashintérprete. -
zsh /path/to/script- usarázshinté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