以下是我想做的事情(在脚本中):
#!/usr/bin/env bash
if [[ ! $("/usr/bin/scp [email protected]:/Users/seamus/Downloads/imgutils/image-utils* /home/pi/testscp") ]]; then
printf "\nERROR & EXIT: 'scp' failed \n"
exit 1
fi
printf "success!\n"
我尝试过几种方法,但似乎都不起作用。以下是我从上面得到的结果:
./testscp.sh: line 3: /usr/bin/scp [email protected]:/Users/seamus/Downloads/imgutils/image-utils* /home/pi/testscp: No such file or directory
ERROR & EXIT: 'scp' failed
命令scp
单独一行时可以正常运行。如果我这样做,我可以测试$0
- 运行正常...但我更喜欢在一行中完成所有操作。我遗漏了什么?
if
单独使用,并引用包含所针对的 glob 的参数scp
:在 bash 中,引号用于分隔单个标签,否则该标签将被解释为多个标签(由于空格字符)。因此当 bash 读取时:
它将其解释为:
您的引文放错了地方。
为了将其分解为可执行文件,有多种编写方法,但简单来说:
就足够了。
[[...]]
但正如@StephenKitt所说,测试( )和扩展( )的组合$(...)
是多余的。事实上(正如ikkachu在下面指出的那样)这是在测试stdout上的非空响应,而不是scp的退出代码。这是一个风格问题,而不是功能问题,但我认为编写很长的脚本并不是一个好风格。