小编sch*_*ity的帖子

echo 0>file.txt 和 echo 0 > file.txt 有什么区别?

我看到这有这样的行为:

[root@divinity test]# echo 0 > file.txt
[root@divinity test]# cat file.txt
0
[root@divinity test]# echo 0> file.txt

[root@divinity test]# cat file.txt

Run Code Online (Sandbox Code Playgroud)

我还注意到,如果我包含"",那么它会按预期工作:

[root@divinity test]# echo 0""> file.txt
[root@divinity test]# cat file.txt
0
Run Code Online (Sandbox Code Playgroud)

我想这只是 IO 重定向的一部分,但我不太明白在echo 0>做什么。

shell io-redirection

28
推荐指数
1
解决办法
4687
查看次数

如何从缓存/nix 存储中删除单个包?

有没有办法强制从 /nix/store/..

我正在测试我的包的表达式,并希望确保它能够正确重建。

问题是如果我构建我的包一次,下次我再次构建它时它将使用缓存。

我使用这个命令来测试我的包

nix-shell -I nixpkgs=</path/to/repo> -p <package_name>
Run Code Online (Sandbox Code Playgroud)

我不想使用,nix-collect-garbage因为它也删除了很多buildInputs

寻找类似的东西 nix-cg <package_name>

nixos nix

14
推荐指数
1
解决办法
8502
查看次数

如何删除删除 PHP 会话的 cron 任务

看来 Linux Mint 19.3 Tricia Cinnamon 想要每半小时清除一次 PHP 会话文件。

我如何能:

  • 从调度程序的意识中删除此任务,并且
  • 无需重新启动计算机即可执行此操作。

我在 找到了 crontab 文件/etc/cron.d/php

我通过对相关行进行注释来编辑该文件。我预计现在这个 crontab 文件中没有任何信息可以确定何时触发任务,甚至调度程序(?)也不会意识到这一点。

# 09,39 *     * * *     root   [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi
Run Code Online (Sandbox Code Playgroud)

cron 进程(?)注意到新的文件时间戳并重新加载文件(如系统日志中所示)。

但调度程序仍在记录系统日志。

Mar  6 01:09:07 BrownBunny systemd[1]: Starting Clean php session files...
Mar  6 01:09:08 BrownBunny systemd[1]: Started Clean php session files.
Run Code Online (Sandbox Code Playgroud)

(我不知道在哪里可以找到这些短语)。

我尝试了命令:

sudo service cron reload
Run Code Online (Sandbox Code Playgroud)

PHP 会话文件仍然被清理。

我可以将 php crontab 文件移出cron.d. 考虑到上述情况,这是否可行? …

cron php

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

$(CC) 和 $CC 有什么区别?

我正在尝试使用 yocto poky 环境。我做了以下事情:

#source environment-setup-cortexa9hf-neon-poky-linux-gnueabi 
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试使用以下方法编译程序:

#$(CC) hello.c -o hello.elf 
Run Code Online (Sandbox Code Playgroud)

由于$(CC)未定义,它会引发我的错误。

但是,如果我这样做的$CC话。我对 $(CC) 和$CC?

linux bash

6
推荐指数
1
解决办法
2262
查看次数

为什么 awk 不忽略“空格”作为分隔符?

我的脚本有问题。

前奏 首先,我有一个列表,100 行文件,如下所示:

100;TEST ONE
101;TEST TWO
...
200;TEST HUNDRED
Run Code Online (Sandbox Code Playgroud)

每行有 2 个参数。例如,第一行的参数是:“645”、“TEST ONE”。所以分号是一个分隔符。

我需要将两个参数放在两个变量中。假设它将是 $id 和 $name。对于每一行,$id 和 $name 值将不同。例如,对于第二行 $id = "646" 和 $name = "TEST TWO"。

之后,我需要获取示例文件并将预定义的关键字更改为 $id 和 $name 值。示例文件如下所示:

xxx is yyy
Run Code Online (Sandbox Code Playgroud)

因此,我想要 100 个不同内容的文件。每个文件必须包含每一行的 $id 和 $name 数据。并且它必须以它的 $name 值命名。

有我的脚本:

100;TEST ONE
101;TEST TWO
...
200;TEST HUNDRED
Run Code Online (Sandbox Code Playgroud)

所以,我只是尝试逐行读取我的列表文件。对于每一行,我得到两个变量,然后使用它们替换示例文件中的关键字(xxx 和 yyy),然后保存结果。

但是出了点问题

结果我只有 1 个输出文件。并且调试看起来很糟糕。

这是我的列表文件中只有 2 行的调试窗口。我只有一个输出文件。文件名只是“TEST”,它包含一个字符串:“101 是 TEST”。

需要两个文件:“测试一”、“测试二”,并且必须包含“100 是测试一”和“101 是测试二”。

调试截图

如您所见,第二个变量中有一个空格(例如“TEST ONE”)。我认为这个问题与空格特殊符号有关,但我不知道为什么。我将 -F awk 参数放在“;”中,因此 awk 必须仅将分号解释为分隔符!

我做错了什么?

bash sed awk

6
推荐指数
1
解决办法
1717
查看次数

bash 中的egrep [[:print:]] 命令有什么用?

我正在开发一个 shell 脚本的增强功能,它可以读取文件并处理它。基本上,输入文件包含一个标题记录,后面跟着一些详细记录。我只想从文件中获取头记录。

$ cat sample_file.txt
header1,header2,header3,header4
value1,value2,value3,value4
Run Code Online (Sandbox Code Playgroud)

现有脚本使用以下命令从文件中获取标头:

$ cat sample_file.txt | head -1 | egrep -o '[[:print:]]' |  tr '\n' '\0'
header1,header2,header3,header4$
Run Code Online (Sandbox Code Playgroud)

我不知道egrep -o '[[:print:]]'在这里做什么。因为即使没有这个egrep命令也可以这样写

按原样打印标题

$ cat sample_file.txt | head -1
header1,header2,header3,header4

Run Code Online (Sandbox Code Playgroud)

或者打印标题而不在末尾换行

$ cat sample_file.txt | head -1 |  tr '\n' '\0'
header1,header2,header3,header4$
Run Code Online (Sandbox Code Playgroud)

的手册页egrep讲述了以下内容,但不清楚何时[[:print:]]应该使用。

最后,在括号表达式中预定义了某些命名的字符类,如下所示。它们的名称是不言自明的,它们是 [:alnum:]、[:alpha:]、[:cntrl:]、[:digit:]、[:graph:]、[:lower:]、[:print:] 、[:punct:]、[:space:]、[:upper:] 和 [:xdigit:]。例如,[[:alnum:]] 表示 [0-9A-Za-z],但后一种形式取决于 C 语言环境和 ASCII 字符编码,而前者独立于语言环境和字符集。(请注意,这些类名称中的方括号是符号名称的一部分,除了界定方括号列表的方括号之外还必须包含方括号。)大多数元字符在列表中会失去其特殊含义。要包含文字 ],请将其放在列表的第一位。类似地,要包含文字 ^,请将其放置在除开头之外的任何位置。最后,要包含文字 - 将其放在最后。

您能帮我理解egrep '[[:print:]]'选项的用法以及我们在哪里使用它吗?

linux shell grep bash

6
推荐指数
1
解决办法
782
查看次数

在bash中迭代字符串变量行

我有一个脚本,我想在其中使用命令列出 USB 设备lsblk

命令:

$ lsblk -o NAME,TRAN,VENDOR,MODEL | grep usb
Run Code Online (Sandbox Code Playgroud)

这导致

sdb   usb    Kingston DataTraveler 2.0
sdc   usb    Kingston DT 101 G2 
Run Code Online (Sandbox Code Playgroud)

我想将结果保存在一个变量中以便以后工作,所以我写

$ usbs=$(lsblk -o NAME,TRAN,VENDOR,MODEL | grep usb)
Run Code Online (Sandbox Code Playgroud)

我期待的是变量usbs将结果存储在两整行中,如上所示。但如果我跑:

for i in ${usbs[@]}; do
  echo $i
done
Run Code Online (Sandbox Code Playgroud)

我把结果分成几个词:

sdb
usb
Kingston
DataTraveler
2.0
sdc
usb
Kingston
DT
101
G2
Run Code Online (Sandbox Code Playgroud)

问题: 有没有办法,使用grep命令,我可以将命令的结果存储为两整行?

我更愿意知道是否有一个简单的解决方案,而不是将结果转储到文件中然后读取它。

grep bash usb variable lsblk

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

Bash 差异或首选否定语句

bash 或语句否定的首选用法是否有区别?

if ! [[ -z "${var}" ]]; then
  do_something
fi
Run Code Online (Sandbox Code Playgroud)

相对

if [[ ! -z "${var}" ]]; then
  do_something
fi
Run Code Online (Sandbox Code Playgroud)

bash shell-script test

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

Linux 上的虚拟接口

我需要在 Linux 上创建第二个单独的虚拟接口。

我选择dummy。并执行以下步骤:

$ cat /etc/modules-load.d/dummy.conf
# Load dummy.ko at boot
Run Code Online (Sandbox Code Playgroud)

假的

$ cat /etc/sysconfig/network-scripts/ifcfg-ethdummy1
NAME=ethdummy1
DEVICE=ethdummy1
MACADDR=00:22:22:ff:ff:ff
IPADDR=10.10.10.1
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
Run Code Online (Sandbox Code Playgroud)

似乎一切正常。但在网上我看到人们也这样做:

$ cat /etc/modprobe.d/dummy.conf 
install dummy /sbin/modprobe --ignore-install dummy; /sbin/ip link set name ethdummy1 dev dummy0
Run Code Online (Sandbox Code Playgroud)

这条线有什么意义?谢谢。

linux modprobe interface network-interface

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

bash脚本中逻辑AND(&amp;&amp;)和OR(||)的悖论来检查命令是否成功执行(退出码0被解释为true)

所以我很清楚退出代码0被认为是程序运行成功。然后我们在 bash 脚本中使用它逻辑ANDOR根据第一个程序的退出状态运行下一个程序。一个很好的例子可以在这里找到:https : //unix.stackexchange.com/a/187148/454362

这是否意味着0被解释为真而任何其他数字但零被解释为假?这与我所知道的所有编程语言都相反。那么我可以假设 bash 内部使用逻辑NOT将退出代码反转为正确的 false / true 值吗?

所以,这些是一些例子:

#should result in false, and bash shows 0 as false
echo $(( 1 && 0 ))

# should result in true,  and bash shows 1 as true
echo $(( 1 || 0 )) 

# does not show 'hi'; even though if false is zero per first example, then
# this should be considered success exit code …
Run Code Online (Sandbox Code Playgroud)

bash shell-script exit-status

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