Quero criar uma pasta temporária em uma máquina remota usando mktemp e, em seguida, mover alguns arquivos da máquina remota para esse diretório.
Eu tentei o seguinte:
ssh "$target" "mv $HOME/scripts/* $(mktemp -d -t scripts.XXXXXX)"
Mas recebo um erro da máquina remota informando que tal arquivo não foi criado. Alguma ideia?
Em:
o
mv $HOME...
está dentro de aspas duplas, e dentro de aspas duplas, expansões de parâmetros e substituições de comandos são executadas, então elas$HOME
serão$(...)
expandidas pelo shell local , não pelo shell remoto.Você precisa colocar aspas simples em volta do código do shell para que ele seja passado literalmente para o shell remoto, e você deve verificar se o tmpdir foi criado corretamente antes de mover os arquivos para lá:
Isso pressupõe que o shell de login do usuário remoto
$target
seja do tipo POSIX.Se você não puder garantir, mas souber que o
ssh
servidor no host remoto aceitaLC_*
variáveis de ambiente como muitos fazem, você pode fazer:Que funciona:
Que é uma sintaxe compreendida pela maioria dos shells (todos os comuns, em qualquer caso) e executa
sh
, dizendo para avaliar o código na$LC_CODE
variável de ambiente.Ou você pode fazer:
Onde o código é passado para um,
sh
executado remotamente por meio de seu stdin. Redirecionamosmv
o stdin de para/dev/null
, poismv
pode solicitar ao usuário em algumas circunstâncias, e não queremos que ele leia a resposta daquele pipe onde alimentamos o código.