我正在寻找一种过滤/重定向 rsync 输出的方法,可以将其提供给“dialog --gauge”命令,以便在文件同步期间获得漂亮的进度条。目前我只在提示符下直接对其进行了测试,但我计划在 (bash) shell 脚本中执行此操作。
我环顾了互联网,发现了一些零碎的东西,但我仍然缺少一些东西来使它工作
(免责声明:这可能是一种完全错误的方法,并且是一种重定向/管道怪物)
我目前汇总的内容:
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
Run Code Online (Sandbox Code Playgroud)
首先,我有带有 --progress 选项的实际 rsync 命令 rsync 的输出通过管道传输到 awk 并使用以下 awk 过滤器:
{
if (index($0, "to-check=") > 0)
{
split($0, pieces, "to-check=")
split(pieces[2], term, ")");
split(term[1], division, "/");
print (1-(division[1]/division[2]))*100
}
# else
# {
# print "#"$0;
# }
fflush();
}
Run Code Online (Sandbox Code Playgroud)
这会过滤掉 …
在我的机器上,我需要执行一个循环来迭代 1 个简单命令,该命令必须具有以几分之一秒表示的延迟。
假设我需要:
time > file-$x我如何才能真正精确并用 bash 脚本表达所有内容?
分数可以产生一个无法确定的数量,我需要精确,所以我至少需要 4-5 位小数。
我知道我可以运行以下命令
ls Some{File,Folder}
Run Code Online (Sandbox Code Playgroud)
它相当于运行这个:
ls SomeFile SomeFolder
Run Code Online (Sandbox Code Playgroud)
(我也经常用它来做类似的事情mv place_{a,b})
但是,我想知道是否有其他快捷方式可以执行以下操作:
run-command --a --whole --lot --of --flags parameter a; \
run-command --a --whole --lot --of --flags parameter b
Run Code Online (Sandbox Code Playgroud)
我只需要打字run-command --a --whole --lot --of --flags parameter {a,b}或类似的东西。
设置每月通过脚本运行的 cron 作业。
该脚本是每个月轮换一个文件,因为它变得太大并重命名旧文件。当文件超过六个月时,我希望将其删除。
希望每月运行一次此脚本。旧的可以删除吗?
如果这还不够清楚,请告诉我。
我知道像grep这样的行为良好的实用程序将“正常”消息输出到 stdout,将错误消息输出到 stderr。
$ grep '^foo' file1 file2
file1:foo
grep: file2: No such file or directory
Run Code Online (Sandbox Code Playgroud)
当我自己编写 shell 脚本时,我经常发现很难决定我应该在 stderr 上显示什么输出和哪些消息,或者我是否应该打扰。
我想知道一些好的做法:什么时候将一些消息重定向到标准错误是合理的,什么时候不需要?
“这取决于”,当然,但是您是否有一些见解可以帮助我做出这些决定?
为了使这个主观问题符合格式,我想鼓励回答“为什么”,并以经验为基础,并在可能的情况下以事实为依据。
我有一个 bash 脚本。如果我运行此命令:
然后我在终端中每行找到一个 grep find
LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq
Run Code Online (Sandbox Code Playgroud)
但是,如果我把它放在一个输出变量中,那么格式就会丢失(在回显到文件或在屏幕上回显时)。
#!/usr/bin/env bash
output=$(LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq)
echo $output > $fn
Run Code Online (Sandbox Code Playgroud)
将此命令保存到变量后,如何保留该命令的输出格式?
所以我被告知要last > lastloggedin创建一个文件,该文件显示自上次系统重新启动以来上次登录的类,现在我被要求编写一个 Awk 脚本,该脚本命名为myawk计数/确定lastloggedin包含字符串的行 数CFS264。
我弄完了 grep -c CFS264 lastloggedin
在当前版本的 Raspian 中,我知道可以从命令行更改当前登录用户的密码,如下所示:
sudo passwd
Run Code Online (Sandbox Code Playgroud)
然后会提示用户输入新密码两次。这将产生如下输出:
Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能以编程方式更改密码,例如从 shell 脚本更改密码。
我正在尝试制作一个配置脚本以部署在我的 Raspberry Pi 上,我不想手动为它们输入新密码。
我实际上正在使用 shell 脚本来监视服务器的资源。我有一个函数,我想知道:如何在主函数中调用第二个函数?
例子:
funct mainfunct(){
echo "Text to show here" **$secondfunct**
}
funct secondfunct(){
commands
}
Run Code Online (Sandbox Code Playgroud) 在同一台机器上多个用户帐户的 .bashrc 或 .vimrc 文件末尾添加相同行的上下文中,将最后 n 行从一个 shell 脚本复制到另一个的简单方法是什么?