[4.13.12-1-ARCH 在 Xorg 上使用 gnome3 和 gdm]
我已经将我的 VISUAL 和 EDITOR env-vars 设置为vim. 同样,我确实SYSTEMD_EDITOR="vim"; export SYSTEMD_EDITOR 在我的 ~/.bashrc 中尝试过,但无济于事。
在 Arch (systemd) 中修改单元文件时
$ sudo systemctl edit _unit_
Run Code Online (Sandbox Code Playgroud)
我发现自己盯着nano. 人生苦短,我vim无论如何都想要。我该怎么做呢 ?
我已经写文件90-usb.rules下/etc/udev/rules.d/包含:
ACTION=="add", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", RUN+="/bin/mkdir /home/pandya/Desktop/testdir"
ACTION=="remove", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", RUN+="/bin/rmdir /home/pandya/Desktop/testdir"
Run Code Online (Sandbox Code Playgroud)
当我插入设备时 udevACTION=="add"通过RUN+="/bin/mkdir /home/pandya/Desktop/testdir"(工作正常)创建目录
但是当我拔下类似 udev 的设备时ACTION=="remove ,不会通过以下方式删除目录RUN+="/bin/rmdir /home/pandya/Desktop/testdir"
没有问题,/bin/rmdir因为我也检查过用另一个mkdir( RUN+="/bin/mkdir /home/pandya/Desktop/testdir2")替换它,但这也不起作用。
所以,我想知道为什么删除操作不起作用?我如何解决它?
是否有一种简洁的方法可以在命令行中测试本地类似 Bourne 的 shell 对数组的支持?
这总是可能的:
$ arr=(0 1 2 3);if [ "${arr[2]}" != 2 ];then echo "No array support";fi
Run Code Online (Sandbox Code Playgroud)
或测试$SHELL和外壳版本:
$ eval $(echo "$SHELL --version") | grep version
Run Code Online (Sandbox Code Playgroud)
然后阅读手册页,假设我可以访问它。(即使在那里,从写/bin/bash,我假设所有类似Bourne外壳承认的长选项--version,当减免KSH例如)。
我正在寻找一个简单的测试,它可以无人参与,并在脚本开始时甚至在调用它之前合并到使用部分中。
我有一个名为 Build.number 的文件,内容值为012,我需要将其增加 +1。所以,我试过这个
BN=$($cat Build.number)
BN=$(($BN+1))
echo $BN >Build.number
Run Code Online (Sandbox Code Playgroud)
但在这里,当我期待013时,我得到了值 11 。谁能帮我?
运行 GNU bash,版本 4.3.11(1)-release (x86_64-pc-linux-gnu)。
从有兴趣了解 I/O 处理和相关速度问题的用户的角度来看,我并不真正理解进程替换(ProcSub)。我使用 ProcSub 编写脚本,因此我对文件描述符 0、1、2 有一些了解,但仅此而已。我读过一些不错的帖子,例如[1]和其他。wikis,例如[2],[3],后者说明:“进程替换将一个(或多个进程)的输出(FD 1 和/或 2)馈送到另一个进程的标准输入(FD 0)中”。通过最简单的定义和一个过程,它在操作上似乎与简单的未命名管道没有什么不同。
为了研究这一点,我tee从 i/o 的角度来看,这本身就很有趣。tee允许将"stdin 输入到 stdout 以及作为参数给出的任何文件"。所以 :
$ for i in 1 2 3; do (( j=i+10 )); printf "%d\n" $j > file_$i; done
# so each file in file_{1,2,3} contains the numeral in its name + 10.
$ cat file_{1,2,3} | tee file_4
11
12
13
$ …Run Code Online (Sandbox Code Playgroud) [Archlinux 上的 GNU awk v4.2.1]
抑制awk从 cli 到 stdout 的默认打印操作很简单,并且在 UL 上有详细记录,例如此处。从脚本中执行此操作让我很头疼。这是玩具脚本:
#!/usr/bin/awk -f
BEGIN {FS=","}
FNR > 1 # skip header
{
if ( $1 == $2 ) {
if ( NR == 4 ) {
printf("*** Print NR=4 ok. \n")
} else {
print > "/dev/null" # print nothing
}
} else {
printf("=== Fields 1 and 2 not equal (NR=%s). \n",NR)
}
}
Run Code Online (Sandbox Code Playgroud)
和玩具数据:
col1 col2
1,3
2,2
aa,aa
3.01,-353.01
4.1,4.1
101,101
hello, …Run Code Online (Sandbox Code Playgroud) 考虑以下awk语句及其输出:
$ awk -F "/" '/\/tcp/ {print $1}' input_file
10\n
20\n
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
10,20
Run Code Online (Sandbox Code Playgroud)
我尝试的是:
$ awk -F "/" 'BEGIN{ORS=","} /\/tcp/ {print $1}' input_file
10,20,
Run Code Online (Sandbox Code Playgroud)
如何去掉末尾的逗号?
我尝试运行这些命令
$ nano /usr/bin/script.sh
$ chmod +x /usr/bin/script.sh
$ cat /lib/systemd/system/shellscript.service
[Unit]
Description=My Shell Script
[Service]
ExecStart=/usr/bin/script.sh
[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload
$ systemctl enable shellscript.service
$ systemctl start shellscript.service
Run Code Online (Sandbox Code Playgroud)
但在检查服务状态时,我得到:
$ systemctl status shellscript.service
shellscript.service - My Shell Script
Loaded: loaded (/lib/systemd/system/shellscript.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2022-05-23 13:20:33 EEST; 14s ago
Process: 1276 ExecStart=/usr/bin/script.sh (code=exited, status=1/FAILURE) Main PID: 1276 (code=exited, status=1/FAILURE)
CPU: 10ms
May 23 13:20:33 kali systemd[1]: Started My Shell Script.
May …Run Code Online (Sandbox Code Playgroud)