以下を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"
...うまくいきますが、そうではありません。私が白髪になって禿げる前に何か提案はありますか?ありがとう
私が試したすべてのバリエーションでスペースを無駄にすることはありませんが、ほとんどすべてをエスケープしようとしたと言えます。「No such file or Directory」を受け取った場合、ファイルが実際に解決されるまで明らかにエスケープしますが、パス エラーが発生しない場合でも、コマンドは正常に完了しません。
これは非常に特殊なケースであることは理解していますが、将来的には他の人にも役立つと思います:スペースのエスケープ、bashスクリプトでの埋め込みの使用(私はシバンと埋め込みexpect
でテストしただけでなく、なしの単純なコマンドを使用しました変化する。#!/bin/bash
expect using expect -c ' .... '
#!/usr/bin/expect
spawn scp
編集(応答に基づく):
私はそれを引用しようとしたことを言及すべきでした...
最初の(ホスト)部分を引用すると、エラーが発生します
"(date +%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