Merge pull request #688 from juangacovas/patch-1

Update FAQ entry on scripting
This commit is contained in:
Daniel Poelzleithner 2024-11-27 16:09:51 +01:00 committed by GitHub
commit 5619ec57cc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -39,4 +39,40 @@ sync {
} }
{% endhighlight %} {% endhighlight %}
If you want to track directories and files passed to rsync command (--include-from) in your bash script, consider that they come via STDIN and NUL delimited chars (rsync is called using --include-from=- --from0).
After calling rsync within your script, STDIN is lost, so if you need it later could do something like this:
{% highlight shell %}
#!/bin/bash
#create unique temp file to store incoming STDIN
_TMP_FILE=$(mktemp -q /tmp/lsd-rsync.XXXXXXXXXX || exit 1)
#Set trap to automatically clean up the temp file on exit
trap 'rm -f -- "$_TMP_FILE"' EXIT
#get last argument (TARGET) and next to last (SOURCE)
_SOURCE=${@: -2:1}
_TARGET=${@: -1:1}
#save the current STDIN with \0 (NUL) chars to a file, or we'll lose the original STDIN after calling rsync
cat - >$_TMP_FILE
#execute rsync with arguments and inject STDIN with NUL delimited chars
/usr/bin/rsync "$@" <$_TMP_FILE
result=$?
(
# ...
# Do anything you need with our saved STDIN as $_TMP_FILE, $_SOURCE, $_TARGET, etc.
# ...
# for example
# replace \0 (NUL) chars with tabs in our stdin saved as a file
# sed -i 's/\x0/\t/g' $_TMP_FILE
# pass this new file to other script, etc.
)
{% endhighlight %}
## [ back to FAQ index](../) ## [ back to FAQ index](../)