Acho que esta parte provavelmente não está funcionando devido à ordem de operações . A expansão de til ocorre antes da expansão do parâmetro, portanto, na verdade, você está tentando encontrar um arquivo chamado literalmente, por exemplo, ~userA/blah
, e não um arquivo chamado blah
no diretório inicial do usuário.
Você poderia invocar outro shell para obter a próxima rodada de expansão, como
sudo -u "$x" sh -c "cat ~/blah"
e não é necessário especificar o nome de usuário no caminho, pois você já será o usuário e ~
deve ser o diretório inicial