这个bash脚本应该通过ssh从其他地方获取令牌,然后运行curl命令,从stdin上的文件读取数据。
#!/usr/bin/env bash
TOKEN=$(ssh somewhere cat sometoken.txt)
curl https://example.com \
-H "Authorization: Bearer $TOKEN" \
-H "someparam=@-" \
-X POST
脚本的调用方式如下:
cat somefile | myscript
当我硬编码TOKEN=abcd123
而不是使用时$(ssh ...)
,somefile
将按curl 的预期上传。
但是当我使用$(ssh ...)
我的文件时没有上传。
我认为我的脚本的标准输入正在被破坏,$(ssh ...)
但我不知道如何解决这个问题。
任何帮助将非常感激。
答案1
简而言之,使用ssh -n ...
该ssh
工具从标准输入读取所有数据。这样做是为了能够将其传递给您在远程端执行的任何命令(ssh remote 'cat >out' <in
如果您愿意,您可以使用它来将文件的内容复制到远程系统)。
通过它的-n
选项,你可以告诉它不要这样做。它或多或少相当于/dev/null
通过执行重定向到其标准输入ssh ... </dev/null
。