小编tha*_*isp的帖子

Bash 补全在单词后附加一个空格 - 我怎样才能阻止这个?

我正在为 Bash 编写一个制表符补全脚本,使用 Python 来提供补全结果。我正在使用虚拟脚本来显示我遇到的问题,内容并不重要。

我有一个名为 的 Bash 脚本dothat,其中包含以下代码:

var=$1
echo "You have chosen $var"
Run Code Online (Sandbox Code Playgroud)

我还有一个为 创建制表符完成的脚本dothat,称为dothat-completion.bash

_comp_func()
{
    COMPREPLY=()

    # Gets the output of a Python file and puts it into a variable
    fruits=$(python fruit.py)

    COMPREPLY=($(compgen -W "${fruits[*]}" -- $cur)) 
}

complete -F _comp_func dothat
Run Code Online (Sandbox Code Playgroud)

以及(简单)内容fruit.py

print('fruit:', end='')
Run Code Online (Sandbox Code Playgroud)

Python 脚本只是将字符串打印到 STDOUT,然后由 Bash 补全函数捕获该字符串,并用于生成制表符补全的可能匹配项。

现在,我想用这个脚本做的是,当我输入 时dothat <TAB>,它将完成到dothat fruit:,末尾没有空格。问题是,当我键入dothat 并按 Tab 时,它会完成为dothat fruit: ,并带有不需要的尾随空格。

我尝试将Python的内容更改为以下内容,并且所有结果都相同:

print('"fruit:"', end='') …
Run Code Online (Sandbox Code Playgroud)

bash python autocomplete shell-script

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

如何比较两个文件然后附加不是部分匹配的行?

我正在尝试比较两个文件(Extensions.txtTemp.txt)。如果有一行与Extensions.txtin部分不匹配,Temp.txt我想将缺少的行附加到Temp.txt.

Extensions.txt (非常基本,一栏):

111
1234
4321
Run Code Online (Sandbox Code Playgroud)

Temp.txt

1234/sip:1234@192.168.1.10:5060  9421b96c5e   Avail   1.480
4321/sip:4321@192.168.1.11:5060  e9b6b979a4   Avail   1.855
Run Code Online (Sandbox Code Playgroud)

基本上,我想要做的是根据/第一列之前的所有内容找到匹配项,如果没有匹配项,我想将不匹配的行打印到文件的底部,以便它最终像这样:

1234/sip:1234@192.168.1.10:5060  9421b96c5e   Avail   1.480
4321/sip:4321@192.168.1.11:5060  e9b6b979a4   Avail   1.855
111
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过grep -v但它没有产生我想要的结果,我也尝试过,awk似乎这是要走的路,但是我没有完全了解如何awk产生适当的结果.

grep awk text-processing

4
推荐指数
1
解决办法
463
查看次数

如何在 Linux 机器上从 man7.org 获取完整的手册页集?

我有时会发现 man7.org 有可用的手册页,在我的 Linux 发行版上本地找不到。

一个例子是veth(4),它提供有关 veth 网络设备的信息。

apropos尽管ip安装了(iproute2) ,但使用快速检查不会返回任何结果:

parallels@debian-gnu-linux-vm:~$ apropos veth
veth: nothing appropriate.
Run Code Online (Sandbox Code Playgroud)

如何在网络设备(例如veth(4))上获得这些非常有用的手册页?

更一般地说,我如何获得完整的 man7.org 数据库?

parallels@debian-gnu-linux-vm:~$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Run Code Online (Sandbox Code Playgroud)

linux man debian

4
推荐指数
1
解决办法
452
查看次数

如何将可选参数传递给“time”命令

man time显示它有一些选项,例如,将输出写入time文件而不是stderr

-o FILE, --output=FILE
Run Code Online (Sandbox Code Playgroud)

所以,我尝试使用它

$ time -o out.txt ls
-o: command not found

real    0m0.081s
user    0m0.070s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)

这不行!它说-o: command not found

证明out.txt不存在:

$ cat out.txt
cat: out.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我如何使用像-o somefile.txtwith这样的选项time

我使用 Linux Ubuntu 18.04bash作为我的终端。

bash time

4
推荐指数
1
解决办法
977
查看次数

如何使用 JQ 将两个 JSON 中的多个数组合并

我有两个 JSON 文件(file1.jsonfile2.json),其结构与下面定义的相同,并带有两个数组列表,如下所示。

第一个文件是(file1.json):

{
  "Lists1": [
   {
      "point": "a",
      "coordinates": [
        2289.48096,
        2093.48096
      ]
   }
  ],
  "Lists2": [
   {
      "point": "b",
      "coordinates": [
        2289.48096,
        2093.48096
      ]
   }
 ]
}
Run Code Online (Sandbox Code Playgroud)

第二个文件是(file2.json):

{
  "Lists1": [
   {
      "point": "c",
      "coordinates": [
        2289.48096,
        2093.48096
      ]
   }
  ],
  "Lists2": [
   {
      "point": "d",
      "coordinates": [
        2289.48096,
        2093.48096
      ]
   }
 ]
}
Run Code Online (Sandbox Code Playgroud)

所以我的预期输出将是:

{
  "Lists1": [
   {
      "point": "a",
      "coordinates": [
        2289.48096,
        2093.48096
      ]
   },
   {
      "point": …
Run Code Online (Sandbox Code Playgroud)

linux json jq

4
推荐指数
1
解决办法
7258
查看次数

安装后如何卸载“dev”?

看来我dev安装后无法卸载。我正在继续Ubuntu 18.04.2 LTS运行4.15.0-1052-aws

mkdir -p ~/jail/dev
pushd ~/jail
sudo mount --rbind /dev dev/
sudo umount  dev/
umount: /home/ubuntu/Code/conversations/jail/dev: target is busy.
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在不重新启动机器的情况下卸载它吗?

或者,有没有一种方法可以安装它以便更容易卸载?

更新:这是以下的输出lsof /home/ubuntu/Code/conversations/jail/dev

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
kdevtmpfs  55 root  cwd    DIR    0,6     2980    2 dev
kdevtmpfs  55 root  rtd    DIR    0,6     2980    2 dev
Run Code Online (Sandbox Code Playgroud)

mount unmounting

3
推荐指数
1
解决办法
4341
查看次数

替换所有字符直到看到特定字符

例如,这是 md5sum 命令输出:

35c9581c469c366e286be708a9d9f939  input.txt
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的命令行:

md5sum input.txt | sed -f script.sed
Run Code Online (Sandbox Code Playgroud)

我想让 md5sum 的输出看起来像这样:

35c9xxxxxxxxxxxxxxxxxxxxxxxxxxxx  input.txt
Run Code Online (Sandbox Code Playgroud)

目前,我的 .sed 脚本包含此内容,它会编辑除前 4 个字符之外的所有内容:

s/./x/5g
Run Code Online (Sandbox Code Playgroud)

当它看到空格“ ”时,我需要让它停止这样做。有什么想法吗?

linux sed text-processing

3
推荐指数
1
解决办法
405
查看次数

交换文件中的行

我有一个这样的文件:

DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=947458,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=9776c3f8-f2ee-4b6c-a9a9-32d87b45f7c5,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=10717,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=e0a838f0-3d53-42e8-8dad-bd1d774381de,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=1500,ou=Entities,ou=Active,ou=Vault<br />
Run Code Online (Sandbox Code Playgroud)

并且应该改为这样(交换第1行和第4行)

dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br /> …
Run Code Online (Sandbox Code Playgroud)

linux text-processing

3
推荐指数
1
解决办法
799
查看次数

Debian 11 蓝牙 sap 驱动程序初始化失败

我尝试通过蓝牙将语音连接到笔记本电脑,当我连接到笔记本电脑时,笔记本电脑显示消息“ACTION II 设置失败”。我做了一些搜索,安装了非免费存储库,但它仍然无法工作。最终我找到了这篇文章并决定看看我的电脑会做出什么反应。我执行systemctl status bluetooth.service的结果是:

\n
    \xe2\x97\x8f bluetooth.service - Bluetooth service\n     Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)\n     Active: active (running) since Tue 2022-06-07 20:19:30 CEST; 20min ago\n       Docs: man:bluetoothd(8)\n   Main PID: 686 (bluetoothd)\n     Status: "Running"\n      Tasks: 1 (limit: 18984)\n     Memory: 6.7M\n        CPU: 105ms\n     CGroup: /system.slice/bluetooth.service\n             \xe2\x94\x94\xe2\x94\x80686 /usr/libexec/bluetooth/bluetoothd\nJun 07 20:19:30 debian bluetoothd[686]: profiles/sap/server.c:sap_server_register() Sap driver initialization failed.\nJun 07 20:19:30 debian bluetoothd[686]: sap-server: Operation not permitted (1)\nJun 07 20:20:40 debian bluetoothd[686]: src/service.c:btd_service_connect() a2dp-sink profile connect failed for …
Run Code Online (Sandbox Code Playgroud)

debian bluetooth systemctl

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

在与另一个模式匹配的目录中查找与模式匹配的文件

在我求助于编写 Python 来执行此操作之前,bash 中必须有一种使用 find 或类似工具的方法。我想搜索一棵树,并找到名称与某个模式匹配的所有文件,这些文件位于与另一个模式匹配的目录中。例如:foo_[0-9][0-9]在名为 的目录中命名的所有文件bar_[0-9]。所以,我希望找到所有这些文件(从当前目录):

a/b/bar_4/foo_02
b/bar_0/foo_03
a/b/c/d/bar_8/foo_88
Run Code Online (Sandbox Code Playgroud)

谢谢。

find

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