与 expect 实用程序一起使用时,scp 命令的行为会有所不同

Cha*_*ani 5 shell quoting wildcards expect

expect -c 'spawn scp -C -o CompressionLevel=9 ~/partFiles/* abc@10.200.4.15:/export/home/abc/; sleep 10; expect password; send "secretPassword\n";interact'
Run Code Online (Sandbox Code Playgroud)

抛出 - ~/partFiles/*: No such file or directory

只是

scp -C -o CompressionLevel=9 ~/partFiles/* abc@10.200.4.15:/export/home/abc/

然而,完美的作品。

为什么?如何解决这个问题?

Eri*_*ouf 4

我认为 和~*由 shell 扩展的,但我敢打赌,expect 会scp直接调用,绕过 shell,这样它们就不会被扩展。您可以尝试生成sh -c命令scp

如果这是一个选项,那么与服务器共享您的密钥也可能会更容易,因此您根本不需要对此有任何期望。

使用该sh技术,命令最终将如下所示:

expect -c 'spawn sh -c "scp -C -o CompressionLevel=9 ~/partFiles/* abc@10.200.4.15:/export/home/abc/"; sleep 10; expect password; send "secretPassword\n";interact'
Run Code Online (Sandbox Code Playgroud)