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

Permalänk
Medlem

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

Visa signatur

Archlinux, Sway och Rust, vad mer behövs?

Permalänk
Medlem

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

Visa signatur

Jag tänkte skriva något klyftigt här

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

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

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!

Visa signatur

Archlinux, Sway och Rust, vad mer behövs?