Hjâlp med bash-script. Citationstecknen bråkar...

Permalänk

Hjâlp med bash-script. Citationstecknen bråkar...

Hej,

Jag vill använda rsync för att backa upp min bildmapp och vill då köra följande kommando:

rsync --dry-run -e "ssh -p 12020 -l anders" /Pictures/2010 anders@192.168.1.30:/Blandat/Pictures/

Jag skrev dâ detta script som inte fungerar (citationstecknen krånglar). Är det någon som ser vad felet är?

#!/bin/bash # Backup the pictures folder to the server with rsync # The root-folder LOCALROOT=~/Pictures/ # Sync these folders in the root-folder LOCALFOLDERS="20* Blandat" # Remote folder REMOTEFOLDER=anders@"$SPARROWLAN":~/Blandat/Pictures/ USER=anders # Rsync options OPTIONS="--dry-run --perms --times -P" for folder in $LOCALFOLDERS; do rsync $OPTIONS -e \"ssh -p $SPARROWPORT -l $USER\" $LOCALROOT$folder $REMOTEFOLDER done

Permalänk
Medlem

Varken $SPARROWLAN eller $SPARROWPORT verkar vara definierade. Kan ju vara en början iaf.

Permalänk
Hedersmedlem

`SPARROWLAN` måste definieras innan du använder `$SPARROWLAN` i `REMOTEFOLDER`; annars så kommer det bara bli blankt.

Du lever lite farligt med din variabel `LOCALFOLDERS`. Asterisken kommer försöka expandera till de filer som matchar "20*" i din hemmapp. Ifall du inte har några filer enligt detta mönster där så kommer asterisken vara kvar och expanderas på "rätt" sätt senare, men detta kommer bara gälla tills du skapar en sådan fil i din hemkatalog, då skriptet kommer börja fallera. Så skulle jag tolka koden om jag var Bash, och några snabba tester lokalt verkar styrka detta.

En (otestad) variant. Om den inte funkar kanske den bara leder dig längre bort från målet, så känn dig fri att ignorera

LOCALROOT="$HOME/Pictures" REMOTEROOT="$HOME/Blandat/Pictures" SPARROWLAN="192.168.1.30" SPARROWPORT="12020" FOLDERS="20* Blandat" USER="anders" OPTIONS="--dry-run --perms --times -P" for FOLDER in $FOLDERS; do LOCALFOLDERS="$LOCALFOLDERS $LOCALROOT/$FOLDER" done rsync $OPTIONS $LOCALFOLDERS rsync://$USER@$SPARROWLAN:$SPARROWPORT/$REMOTEROOT

Permalänk

Oj ursäkta,

$SPARROWLAN och $SPARROWPORT är redan definierade globalt (.bashrc).

När scriptet körs fårs detta svar:

backupPictures Missing trailing-" in remote-shell command. rsync error: syntax or usage error (code 1) at main.c(363) [sender="3.0.7"] Missing trailing-" in remote-shell command. rsync error: syntax or usage error (code 1) at main.c(363) [sender="3.0.7"]

Det underliga är att det funkar bra att skriva ut strängen när jag skriver echo framför rsync...

Skrivet av phz:

Du lever lite farligt med din variabel `LOCALFOLDERS`. Asterisken kommer försöka expandera till de filer som matchar "20*" i din hemmapp. Ifall du inte har några filer enligt detta mönster där så kommer asterisken vara kvar och expanderas på "rätt" sätt senare, men detta kommer bara gälla tills du skapar en sådan fil i din hemkatalog, då skriptet kommer börja fallera. Så skulle jag tolka koden om jag var Bash, och några snabba tester lokalt verkar styrka detta.

Hade ingen aning om detta, ska undersökas!