执行以下脚本,被键盘输入Ctrl+打断,C如图所示:
$ function a() { echo "Performing"; sleep 10; echo "Performed"; }
$ a
Performing
^C
$ echo "${FUNCNAME[@]}"
a source
Run Code Online (Sandbox Code Playgroud)
如果我们多次重复SIGINTduring 函数a,我们最终会得到这样的场景:
...
$ a
Performing
^C
$ a
Performing
^C
$ echo "${FUNCNAME[@]}"
a a a a a a a a a source
Run Code Online (Sandbox Code Playgroud)
为了演示这个问题,让我们有另一个函数,b,它给出了一个message_error函数,也定义如下:
$ function message_error() {
> local MESSAGE="$1"
>
> # FUNCNAME[1], as [0] is `message_error`, gets the calling function
> echo "[[ …Run Code Online (Sandbox Code Playgroud) 我想要的是:
我每天都在尝试将许多文件备份到 S3。我想每天将它们压缩到档案中,这样每个单独的备份就不会花费太多。因此,我想要一个备份系统,通过它我可以从前一天创建差异存档以备份到 S3。
我目前的理由是创建一个初始备份,然后每天创建与初始备份不同的基础备份。
例子:
假设我有一个名为的目录,dir其中包含一个文件a.txt:
dir:
a.txt
Run Code Online (Sandbox Code Playgroud)
然后假设我运行rsync -r dir backup.1,或其他一些备份程序,例如但不限于rdiff-backup. 很棒的东西,我有一个位于backup.1.
现在,我添加一个文件,b.txt,因此其folder内容如下:
dir:
a.txt
b.txt
Run Code Online (Sandbox Code Playgroud)
是否有一个rsync或其他备份实用程序,我可以运行,它会给我一个单独的目录,backup.2只包含文件b.txt?
如果我修改了 的权限a.txt,该文件是否也会被包含在内?
我试过的:
我试过rsyncand rdiff-backup,带有一系列标志,但我无法到达任何地方。我已经做了几个小时了,我无法弄清楚。
编辑:
半途而废!
rsync -n -rpgov backup/ backup-copy/
Run Code Online (Sandbox Code Playgroud)
请注意这-n意味着这是一个试运行,因此您可以愉快地测试它,而不会因文件更改而破坏您自己的本地目录。
这将输出两个本地文件夹之间的差异。但是,我一生都无法弄清楚如何通过rsync的选项发送到新目录。
我试过使用rsync's--compare-dest标志:
rsync -n -rpgov --compare-dest=backup/ backup-copy/
Run Code Online (Sandbox Code Playgroud)
但这似乎向上述命令输出了不同的文件。如何将其推到边缘?
当我在 中执行一个简单的数学运算时#!/bin/sh,是否会创建一个子shell?
例如,
addition=$(( 1 + 1 ))
Run Code Online (Sandbox Code Playgroud)
语法会建议一个子shell,但我在这上面找不到任何东西
sh -c 'printf "%d " 024'
bash -c 'printf "%d " 024'
zsh -c 'printf "%d" 024'
Run Code Online (Sandbox Code Playgroud)
以上输出20 20 24。为什么 zsh 不尊重八进制表示法?有办法改变这个吗?