Você perdeu apenas um símbolo =)
ssh user@socket command < /path/to/file/on/local/machine
É possível fazer isso:
ssh user@socket command /path/to/file/on/local/machine
Isso quer dizer que eu quero executar um comando remoto usando um arquivo local em uma única etapa, sem antes usar scp
para copiar o arquivo.
Uma maneira que funciona independentemente do comando é disponibilizar o arquivo na máquina remota por meio de um sistema de arquivos remoto. Como você tem uma conexão SSH:
# What if remote command can only take a file argument and not read from stdin? (1_CR)
ssh user@socket command < /path/to/file/on/local/machine
...
cat test.file | ssh user@machine 'bash -c "wc -l <(cat -)"' # 1_CR
Como uma alternativa a bash
processo de substituição <(cat -)
ou < <(xargs -0 -n 1000 cat)
(veja abaixo) você pode usar apenas xargs
e cat
para enviar o conteúdo dos arquivos especificados para wc -l
(que é mais portátil).
# Assuming that test.file contains file paths each delimited by an ASCII NUL character # What if remote command can only take a file argument and not read from stdin? (1_CR)
ssh user@socket command < /path/to/file/on/local/machine
...
cat test.file | ssh user@machine 'bash -c "wc -l <(cat -)"' # 1_CR
# and that we are to count all those lines in all those files (provided by test.file).
#find . -type f -print0 > test.file
# test with repeated line count of ~/.bash_history file
for n in {1..1000}; do printf '%s# Assuming that test.file contains file paths each delimited by an ASCII NUL character %pre%
# and that we are to count all those lines in all those files (provided by test.file).
#find . -type f -print0 > test.file
# test with repeated line count of ~/.bash_history file
for n in {1..1000}; do printf '%s%pre%0' "${HOME}/.bash_history"; done > test.file
# xargs & cat
ssh localhost 'export LC_ALL=C; xargs -0 -n 1000 cat | wc -l' <test.file
# Bash process substitution
cat test.file | ssh localhost 'bash -c "export LC_ALL=C; wc -l < <(xargs -0 -n 1000 cat)"'
0' "${HOME}/.bash_history"; done > test.file
# xargs & cat
ssh localhost 'export LC_ALL=C; xargs -0 -n 1000 cat | wc -l' <test.file
# Bash process substitution
cat test.file | ssh localhost 'bash -c "export LC_ALL=C; wc -l < <(xargs -0 -n 1000 cat)"'
Tags ssh