我正在为 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) 我正在尝试比较两个文件(Extensions.txt和Temp.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产生适当的结果.
我有时会发现 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) 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作为我的终端。
我有两个 JSON 文件(file1.json和file2.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) 看来我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) 例如,这是 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)
当它看到空格“ ”时,我需要让它停止这样做。有什么想法吗?
我有一个这样的文件:
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) 我尝试通过蓝牙将语音连接到笔记本电脑,当我连接到笔记本电脑时,笔记本电脑显示消息“ACTION II 设置失败”。我做了一些搜索,安装了非免费存储库,但它仍然无法工作。最终我找到了这篇文章并决定看看我的电脑会做出什么反应。我执行systemctl status bluetooth.service的结果是:
\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) 在我求助于编写 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)
谢谢。