Você não pode acessar um arquivo remoto sem baixá-lo, mas pode baixar um arquivo remoto sem salvá-lo no sistema de arquivos local. Não com o próprio bash, que não inclui suporte para SFTP, mas com utilitários de linha de comando.
O cliente sftp
do OpenSSH não parece ser capaz de fazer isso: ele insiste em obter um local de saída pesquisável, o que exclui sua colocação em uma substituição de comando.
O Curl pode fazer o download de um arquivo para a saída padrão , mas nem sempre é construído com suporte a SFTP (começou como um baixador HTTP).
Como você já sabe como fazer isso em Perl, você pode simplesmente executar o Perl.
Como alternativa, monte o sistema de arquivos remoto pelo SSHFS e acesse-o com qualquer comando, como cat
.
mkdir foo
sshfs example.com:/path/to/directory foo
content=$(cat foo/somefile)
fusermount -u foo
rmdir foo
Como alternativa, faça as coisas do jeito "normal". Shells não são projetados para manipular dados de fantasia na memória, eles são bons em executar outros comandos e trabalhar com arquivos. Trabalhar com conteúdo de arquivo normalmente envolve pipelines e, às vezes, arquivos temporários.
my_tmp_dir=
trap 'rm -rf "$my_tmp_dir"' EXIT INT HUP
my_tmp_dir=$(mktemp -d)
echo 'get remotefile localfile' | { cd "$my_tmp_dir" && sftp -q; }
content=$(cat "$my_tmp_dir/localfile")