标签: bash

如何使用 xmllint 从 xml 获取值

我有以下XML 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Component configuration file -->
<Component>
   <Name>install_env</Name>
   <HelpString>install_env Com</HelpString>
   <Version>1.10.3</Version>
                <Properties>
Run Code Online (Sandbox Code Playgroud)

如何获取名称标签的值 - install_env

通过使用工具 - xmllint

linux xml bash shell-script

5
推荐指数
1
解决办法
2万
查看次数

7zip Linux 命令行 - 不包括目录

我想使用 7zip 为我的网站制作 .7z 存档;有一些目录包含大文件(几千兆字节),不值得备份,因为我已经有它们的备份。我可以指定仅备份特定文件或目录,但我计划制作一个脚本来为我执行此操作,并且不断更新脚本以包含新文件、文件类型和目录会有点烦人。我在文档中找不到任何有关排除目录的内容;只有文件。执行此操作的最简单方法是什么?

我之前使用的命令(在我要避免大文件之前)很简单

7z a backup.7z *
Run Code Online (Sandbox Code Playgroud)

在工作目录中完成。

linux backup bash command-line 7-zip

5
推荐指数
1
解决办法
5324
查看次数

追加到行尾而不换行

当我尝试附加到文件末尾时,它会创建一个新行。现在我尝试用 echo -n 修复此问题,但这不起作用。

那我在努力做什么呢。我试图得到以下结果:

Hello
This
Is
A
Test
Run Code Online (Sandbox Code Playgroud)

但是当我附加带有 echo 的文本时

echo -n "Test2" >> file.txt
Run Code Online (Sandbox Code Playgroud)

发生以下情况:

Hello
This
Is
A
Test
Test2
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

Hello
This
Is
A
Test Test2
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我尝试过 sed、echo 和 printf 但这些都没有给出正确的结果

bash sed command-line echo

5
推荐指数
1
解决办法
1万
查看次数

Taskwarrior 与 Timewarrior - 不能重叠间隔

我有一个 VimWiki、TaskWarrior/TimeWarrior 和 TaskWiki 的设置。昨天我观察到,有些任务没有被跟踪,因为我无法得到timew summary它。

当我直接从 TaskWarrior 启动这些任务时,我收到消息: You cannot overlap intervals. Correct the start/end time, or specify the :adjust hint. 该任务已由 TaskWarrior 正确启动(我可以在列表中看到它为“活动”),但 TimeWarrior 无法以任何方式识别该任务。

我尝试了一些方法,但我在任何地方都找不到不适当的间隔,也找不到有关如何在 TASKwarrior 中使用“:调整”的信息。

示例任务:

Name          Value                                 
ID            10
Description   task review and push                  
Status        Pending
Entered       2018-08-21 11:55:09 (20h)             
Start         2018-08-22 08:09:31
Last modified 2018-08-22 08:09:31 (1min)            
Tags          w daily
Virtual tags  ACTIVE PENDING READY TAGGED UNBLOCKED 
UUID          afe4be48-aed6-4d1f-aba7-d748bf368868
Urgency        4.9                                  

    active      1 *    4 =      4
    tags      0.9 *    1 …
Run Code Online (Sandbox Code Playgroud)

bash gtd vim

5
推荐指数
1
解决办法
604
查看次数

是否有命令让 bash 打印新的提示字符串并重画当前行?

我不想等待缓慢的命令完成,而是想在后台运行它们。但是,当它们完成运行并打印到标准输出时,我得到(其中\xe2\x96\x88代表我的光标):

\n\n
$ slowcmd &\n$ cmd_output\n\xe2\x96\x88\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 我的光标之前没有提示字符串。
  • \n
  • 并且slowcmd可以是任何慢速命令(对于我尝试过的东西,我只是说alias slowcmd=\'sleep 1 && echo cmd_output\'
  • \n
\n\n

而我想要这样的东西:

\n\n
$ slowcmd && redrawPromptString &\n$ cmd_output\n$ \xe2\x96\x88\n
Run Code Online (Sandbox Code Playgroud)\n\n

在命令输出之后,会为我打印出一个新的提示字符串。

\n\n

我可以做些什么来实现redrawPromptString我想要的?我尝试过clearkill $$将 a 发送^C到终端,最后printf "^C"(当然这不起作用)。我正在运行 bash。(GNU bash,版本 3.2.57)。

\n

bash command-line ps1 cmd.exe

5
推荐指数
1
解决办法
2147
查看次数

Cat 在尝试读取空 STDIN 时挂起

我的脚本尝试收集执行时 STDIN 中可能存在或不存在的信息,但如果管道为空,则 cat 会挂起。如果 STDIN 中没有任何内容,如何确保我的脚本跳过此步骤?

stdin=$(cat <&0)
Run Code Online (Sandbox Code Playgroud)

请注意,我并不是专门寻找任何引用 /dev/ 的解决方案,因为我希望它可以在 chroot 中使用,无论 /dev/ 是否已安装(如果可能)。

linux bash cat stdin

5
推荐指数
1
解决办法
3250
查看次数

如何自动进行 borg 备份?

背景

我想使用 Borg Backup 作为我的 Ubuntu 服务器的备份解决方案。他们提供了一个非常方便的sh 脚本,他们说你可以将其作为 cron 作业运行,但它对我不起作用。

问题

如何自动进行 borg 备份?如果最好的方法是使用 cron,那么我的执行有什么问题呢?

数据

Root 的 crontab:

# 5 2 * * * sh /home/***/Scripts/borgBackup_run.sh >/dev/null      # Back up the root partition daily (2:05a)
* * * * * sh /home/***/Scripts/borgBackup_run.sh >/dev/null      # Test the script
Run Code Online (Sandbox Code Playgroud)

borgBackup_run.sh:

对原始内容进行了非常简单的修改:

#!/bin/sh

echo 'Starting backup now...' >> 
/home/***/Logs/borgBackup_create.log

#/usr/bin/borg create --verbose --filter AME --list --stats --show-rc --compression lz4 --exclude-caches --one-file-system --exclude-from ~/Scripts/borgBackup_exclude.txt /mnt/RootBackup/borg::'{hostname}-{now:%Y-%m-%d}' /
/usr/bin/borg create /mnt/RootBackup/borg::cronTest /home/***/Logs/ # …
Run Code Online (Sandbox Code Playgroud)

linux backup bash shell cron

5
推荐指数
2
解决办法
1万
查看次数

如何使用键盘打开 WSL bash 终端的“Alt+Space”菜单

Alt常用的 Windows 应用程序(例如 Cygwin 终端)将通过键入+打开最左上角的菜单,用于调整大小/移动/关闭窗口,Space这非常方便,因为您不必离开键盘。

现在,我如何在 Linux 的 Windows 子系统的 bash 终端窗口中执行类似的操作?(也就是说,我想从键盘移动/调整窗口大小)它不响应Alt+Space键序列。

如果没有办法直接做到这一点,欢迎提出任何替代方案的建议。

windows bash windows-subsystem-for-linux

5
推荐指数
1
解决办法
1114
查看次数

_tkinter.TclError:无法连接以在 Windows 上显示“localhost:0.0”matplotlib bash

受到在 Windows 上使用 Bash (Ubuntu) 终端显示 Python 脚本中使用的 matplotlib 的问题的启发,我遵循了第一个答案中列出的说明。然而,重新启动计算机后,突然出现错误:

_tkinter.TclError: couldn't connect to display "localhost:0.0"
Run Code Online (Sandbox Code Playgroud)

您知道如何修复它并显示图像吗?

引用上述帖子,我有:

  1. 下载并安装Xming
  2. sudo apt-get update
  3. sudo apt-get install python3.6-tk
  4. (之前安装了matplotlib)
  5. export DISPLAY=localhost:0.0并添加到 ~/.bashrc

windows bash xming python3 matplotlib

5
推荐指数
1
解决办法
1万
查看次数

如何获得与父 shell 具有完全相同的当前环境的交互式 Bash 子 shell?

我想为自己\xe2\x80\x94和许多其他用户\xe2\x80\x94创建一个脚本,该脚本将配置使用特定版本工具集\xe2\x80\xa6的环境,然后使用该脚本打开一个交互式shell环境。

\n\n

似乎发生的情况是~/.bashrc执行了各种用户初始化脚本 ( ) 并破坏了部分设置。

\n\n

许多用户(包括我自己)在其 \xe2\x80\xa6 中配置了默认版本的工具~/.bashrc,并希望保持这种状态。

\n\n

我为其制作此脚本的备用版本仅在一小部分时间内使用。

\n\n

我已经尝试过以下方法:

\n\n
setup the environment\nbash\n      # runs ~/.bashrc and breaks the setup\n\nbash -i\n      # runs ~/.bashrc and breaks the setup\n\nbash --rcfile <(echo echo in subshell... $PATH)\n      the displayed $PATH is correct - but I immediately return\n      to the parent (no longer a subshell - not interactive)\n\nbash --rcfile -i <echo echo in subshell... $PATH)\n      the displayed $PATH is correct - but I immediately return\n …
Run Code Online (Sandbox Code Playgroud)

bash

5
推荐指数
1
解决办法
1595
查看次数