Eu não sei se funciona em zsh, mas funciona no bash:
PATH=$(paste -d ":" -s << EOF
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF
)
Editar e ainda mais curto:
PATH='paste -d ":" -s << EOF
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF'
E sem gerar um processo:
new_path=(
"$PATH"
/my/path/1
/my/path/2
/my/path/3)
OLD_IFS="$IFS"
export IFS=":"
PATH="${new_path[*]}"
export IFS="$OLD_IFS"
As aspas duplas são importantes em torno de $PATH
, $IFS
, ${new_path[*]}
e $OLD_IFS
para manter espaços nas variáveis e evitar interpretação de shell do IFS.
Update2 com comentários e gerenciamento de linha vazio usando sed:
PATH='sed -e '/^#/'d -e '/^$/'d << EOF | paste -d ":" -s
$PATH
/my/path/1
# This is a comment.
/my/path/2
/my/path/3
EOF'
O caractere de comentário deve ser o primeiro caractere na linha e as linhas vazias devem estar completamente vazias. Para gerenciar espaços e tabulações antes de comentários e linhas vazias, use sed -e '/^[ \t]*#/'d -e '/^[ \t]*$/'d
(guias a serem testadas, pois podem ser específicas da implementação sed).