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 .