Aparentemente fish usa ; and
para &&
e ()
para substituições de comandos.
Apenas alterando o comando para
pacman -Qtdq; and sudo pacman -Rns (pacman -Qtdq)
deve funcionar.
Respondendo a pergunta atual, normalmente você pode obter uma declaração para ser executada no Bash simplesmente redirecionando a instrução para STDIN de um comando bash
por qualquer meio (observe que estou no Zsh, que suporta aqui strings, e a instrução imprime o conteúdo de uma variável específica do Bash):
% <<<'echo $BASH' bash
/bin/bash
No entanto, como regra geral, sugiro usar a opção bash
-c
. Por exemplo, aqui strings e pipes não tocam muito bem com vários comandos, aqui os documentos serão expandidos pelo shell atual, etc (no entanto, eles precisam ser suportados pelo shell atual).
No geral, bash -c
parece ser sempre uma aposta segura:
bash -c 'pacman -Qtdq && sudo pacman -Rns $(pacman -Qtdq)'
Que para vários comandos se torna algo assim:
bash -c '
command1
command2
command3
'