我看到这有这样的行为:
[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>做什么。
有没有办法强制从 /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>
看来 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. 考虑到上述情况,这是否可行? …
我正在尝试使用 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?
我的脚本有问题。
前奏 首先,我有一个列表,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 必须仅将分号解释为分隔符!
我做错了什么?
我正在开发一个 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:]]'选项的用法以及我们在哪里使用它吗?
我有一个脚本,我想在其中使用命令列出 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命令,我可以将命令的结果存储为两整行?
我更愿意知道是否有一个简单的解决方案,而不是将结果转储到文件中然后读取它。
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) 我需要在 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)
这条线有什么意义?谢谢。
所以我很清楚退出代码0被认为是程序运行成功。然后我们在 bash 脚本中使用它逻辑AND并OR根据第一个程序的退出状态运行下一个程序。一个很好的例子可以在这里找到: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)