我一直试图将以下内容放入bash脚本中:
scp /cygdrive/c/Program\ Files\ \(x86\)/Spiceworks/data/configurations/LA_$(date +%F)-firewall-5520 "sf-mlawler@10.21.1.212:/home/sf-mlawler/SBOX_Automation/SBOX_Dumps/08\ -\ Security/Firewalls"
...通过命令行按预期工作。
当我尝试将它放在脚本中时,我显然必须双倍逃避空间,还有其他什么?我无法通过我尝试过的众多变化获得成功。
我想:
scp /cygdrive/c/Program\\ Files\\ \(x86\)/Spiceworks/data/configurations/LA_\$(date\ +%F)-firewall-5520 "sf-mlawler@10.21.1.212:/home/sf-mlawler/SBOX_Automation/SBOX_Dumps/08\\ \\-\\ Security/Firewalls"
......会起作用,但事实并非如此。在我变灰和秃头之前有什么建议吗?感谢
我不会浪费我所尝试的所有变化的空间,但我会说我已经尝试逃避几乎所有的事情,基本上什么都没有,很多在两者之间没有成功。当我收到“没有这样的文件或目录”时,我明显逃脱,直到文件实际解析,但即使我没有得到路径错误,该命令也没有成功完成。
我确实理解这是一个非常具体的案例,但我想它将来会帮助其他人:使用嵌入式expect
在bash脚本中转义空格(我已使用#!/bin/bash
进行了测试shebang和嵌入式expect using expect -c ' .... '
以及#!/usr/bin/expect
使用简单的spawn scp
命令而无需更改。
编辑(根据回复):
我应该提到我试过引用它......
引用第一个(主机)部分给出错误
无法读取“(日期+%F)”:没有这样的变量 执行时
"spawn scp "/cygdrive/c/Program Files (x86)/Spiceworks/data/configurations/LA_$(date +%F)-firewall-5520" "sf-mlawler@10.21.1.212:/home/sf-mlawler/SBOX_..."
...它不是一个变量,它是一个函数,以year-month-day
在不转义任何内容的情况下引用目标部分会给出错误
scp: ambiguous target
答案 0 :(得分:3)
在bash shell中使用的相同命令在bash脚本中的工作方式应该相同。你不应该也不能逃避它两次。
如果它不起作用,请确保您从同一终端测试脚本,确保脚本内容和命令相同,然后在执行时粘贴终端的输出:
$ scp /cygdrive/c/Program\ Files\ \(x86\)/Spiceworks/data/configurations/LA_$(date +%F)-firewall-5520 "sf-mlawler@10.21.1.212:/home/sf-mlawler/SBOX_Automation/SBOX_Dumps/08\ -\ Security/Firewalls"
(successful scp output here)
$ cat testscript
(testscript contents here, should be identical to above scp command)
$ bash testscript
(unsuccessful script/scp output here)
答案 1 :(得分:2)
只要把它贴在引号上并停止打自己,就像@that_other_guy所说,你不能,也不应该试图逃避两次,无论你有什么想法,都不要把它当作信息来源。 (我的猜测是来自“稀薄的空气”)
scp "/cygdrive/c/Program Files (x86)/Spiceworks/data/configurations/LA_$(date +%F)-firewall-5520" "sf-mlawler@10.21.1.212:/home/sf-mlawler/SBOX_Automation/SBOX_Dumps/08 - Security/Firewalls"
你甚至可以给自己一些帮助:
export PROGFILESx86="/cygdrive/c/Program Files (x86)"
export SPICEWORKS_CONFIGS="${PROGFILESx86}/Spiceworks/data/configurations"
(将它们添加到.bashrc
,执行它。)然后执行:
scp "${SPICEWORKS_CONFIGS}/LA_$(date +%F)-firewall-5520" "sf-mlawler@10.21.1.212:/home/sf-mlawler/SBOX_Automation/SBOX_Dumps/08 - Security/Firewalls"
我还要关注你试图scp
实际存在的文件,将其包装在一个条件中以验证它们是否存在,只有在你自动生成文件名时才有意义
firewall_config="${SPICEWORKS_CONFIGS}/LA_$(date +%F)-firewall-5520"
if [ -e "${firewall_config}" ]
then
scp "${firewall_config}" "sf-mlawler@10.21.1.212:/home/sf-mlawler/SBOX_Automation/SBOX_Dumps/08 - Security/Firewalls"
else
echo "File doesn't exist: ${firewall_config}"
fi
由于你已经更新了你的问题,显然date
调用会给你带来最大的问题,再次,间接可以让你做出奇怪的逃避 - char-yoga,只需将结果输入var并使用它
fw_date=$(date +%F)
firewall_config="${SPICEWORKS_CONFIGS}/LA_${fw_date}-firewall-5520"