O problema é que você está usando shells diferentes. O comando echo
é um shell embutido para a maioria dos shells e cada implementação se comporta de maneira diferente. Agora, você disse que seu shell padrão é fish
. Então, quando você executar este comando:
~> echo -n "asdasd" | shasum -a 256 | cut -d " " -f 1 | xxd -r -p | base64
X9kkYl9qsWoZzJgHx8UGrhgTSQ5LpnX4Q9WhDguqzbg=
você receberá a saída mostrada acima. Isso ocorre porque o echo
de fish
suporta -n
. Aparentemente, no seu sistema, /bin/sh
é um shell cujo echo
não suporta -n
. Se o echo
não entender -n
, o que realmente está sendo impresso é -n asdasd\n
. Para ilustrar, vamos usar printf
para imprimir exatamente isso:
$ printf -- "-n asdasd\n"
-n asdasd
Agora, se passarmos pelo seu canal:
$ printf -- "-n asdasd\n" | shasum -a 256 | cut -d " " -f 1 | xxd -r -p | base64
IzoDcfWvzNTZi62OfVm7DBfYrU9WiSdNyZIQhb7vZ0w=
Essa é a saída que você obtém do seu script. Então, o que acontece é que echo -n "asdasd"
está realmente imprimindo a -n
e uma nova linha à direita. Uma solução simples é usar printf
em vez de echo
:
$ printf "asdasd" | shasum -a 256 | cut -d " " -f 1 | xxd -r -p | base64
X9kkYl9qsWoZzJgHx8UGrhgTSQ5LpnX4Q9WhDguqzbg=
Os itens acima funcionarão da mesma forma na linha de comando e no seu script e devem ser feitos com qualquer shell que você queira tentar. Ainda outra razão pela qual printf
é melhor que echo
.