Articles of bash

如何获得在Bash中从eval开始的进程的PID?

当在bash脚本中做这样的事情时: #!/bin/bash ls & echo $! ls的pid将被打印到控制台上。 但是当我改变它到这个: #!/bin/bash command="ls & echo $!" eval "$command" 它将不再工作。 为什么是这样的,有没有解决方法?

Linux的bash:与正则expression式错误的grep

我正在尝试检测一个网卡是否configuration。 (在Ubuntu 1604上,所以主要的configuration文件将是/etc/network/interfaces )。 我准备了一个正则expression式来从接口文件中searchconfiguration,如下所示: ^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+eth0 这个正则expression式的工作,当我把它直接在grep命令; 但如果我把这个正则expression式放入一个variables中,然后在grep中使用它,那么grep会抛出错误: grep: Invalid regular expression 你能帮忙找出为什么把它不工作,把正则expression式到一个variables? 谢谢! root@ci-1-0:/home/lisa# mainfn=/etc/network/interfaces root@ci-1-0:/home/lisa# nic_name=eth0 root@ci-1-0:/home/lisa# pattern="^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+$nic_name" root@ci-1-0:/home/lisa# echo $pattern ^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+eth0 root@ci-1-0:/home/lisa# grep -E "^[ \t]*(auto|iface|mapping|allow-.*)[ \t]+eth0" $mainfn auto eth0 iface eth0 inet dhcp root@ci-1-0:/home/lisa# grep -E $pattern $mainfn grep: Invalid regular expression

从python脚本导入shellvariables

我在一个shell脚本中有一组常量,这些常量仅用于其他项目,通过采购,即: . /home/test/constants.sh` 要么 source /home/test/constants.sh` 我现在需要使这些值可以被scons脚本访问。 我想到了最简单的一次写入方法就是: 将shell脚本转换为python脚本,以便scons可以直接导入它。 让python脚本或者用适当的variables生成一个shell脚本,或者让shell脚本执行/ source python脚本来导入必要的variables。 shell脚本从python脚本“导入”variables(即键/值对)的最佳方式是什么? python脚本是否只需要将键/值对作为string转储的函数,还是有一种更复杂的方法来使shell脚本和python脚本中的常量保持同步? 而且,将来,GNU Makefile项目也可能需要这些variables。 shell脚本和Makefiles都可以从外部脚本/程序中“导入”variables吗?

无法启动可以在另一台机器上执行的docker容器

我有两台相同的机器 Amazon Linux AMI版本2016.09 其中我有相同版本的Docker Docker版本1.12.6,版本7392c3b / 1.12.6 我在一台机器上运行docker保存程序,在另一台机器上运行docker程序。 我也检查了两台机器上的sha256sum。 而且在我执行某种这个命令之后 docker run –name my_name –rm=true -v /my_volume:my_volume image_name /bin/bash 在一台机器上,我得到一个错误 container_linux.go:247:启动容器进程导致“exec:\”/ bin / bash \“:stat / bin / bash:没有这样的文件或目录” 我只有一个钩子。 import后的容器尺寸与原来的不同。

curl:没有指定URL – -F:找不到命令

您好我正在使用此代码上传一个bash脚本在Linux上的文件: curl -F aok=2 -F Name='azko' -F dir="@path_to_file;filename=zou.odp" -F "tag=1234" -F "OK=2" -F ecoTime=1 -F -F ckx=no "http://blabla" 但是,我收到的错误: curl: no URL specified! curl: try 'curl –help' or 'curl –manual' for more information ./up.sh: line 2: -F: command not found ./up.sh: line 3: -F: command not found 我已经安装了curl 7.47.0。 到目前为止,我试图把\放在线的尽头,但错误仍然不断。 我错过了什么? 当我直接复制这个代码\放置到terminal它的工作,但这次给出了另一种错误 curl: (43) A […]

bash删除脚本不起作用

我有一个bash脚本,应该不是.avi,.mp4和.mkv的所有文件。 这是我试过的: #!/bin/bash FILES=$(find /home/mattia/test/ -type f -name '*.*') for f in $FILES do ext=${f#*.} echo $ext if [[ "$ext" != "mp4" || "$ext" != "mkv" || "$ext" != "avi" ]]; then rm -f $f echo deleted fi done 但是这个脚本删除了所有的文件。

与&符号在最后和没有

这是我被问到的面试问题。 假设你有一个大的脚本文件,用于编译和清理目的。 另外假定你在这个文件的同一个目录下有文件夹命名的folder 。 另外,在这个文件的最后,你有下面的代码行: clean: rm -r -f folder & 当你尝试清理一个项目,假设它工作正常。 但是,如果我们删除&符号并写下: clean: rm -r -f folder 然后在尝试清理之后,会出现以下错误: rm: cannot remove 'folder': Directory not empty 但是,如果您尝试再次清洁,文件夹将根据需要进行清洁。 我需要find所有可能的原因,怎么会发生这种情况。 我能想到的唯一的事情就是如果我们在运行这个脚本的几个线程之间有一些竞争。 然后问我:“如果只有一个线程运行代码呢?” 我不知道这个问题怎么会发生在一个线程上,但似乎我错了,我不知道为什么。 还有什么其他的情况会导致上面的错误? 编辑:在采访中,我也可以假设如下: (1)。 在脚本文件的其他地方没有和号,而是我写的rm代码行。 (2)。 执行rm时不会在folder创build新文件

如果父进程退出,则挂起subprocess退出

我有以下过程树 test1.sh \- test2.sh \- sleep 600 通常如果我杀了test1.sh进程,subprocesstest2.sh和sleep 600将继续运行。 但是,如果我通过发送信号(SIGSTOP或SIGTSTP)暂停睡眠600进程,然后杀死test1.sh进程,则test2.sh和sleep 600将退出。 为什么? 这是我的testing程序: test1.sh #!/bin/sh ./test2.sh test2.sh #!/bin/sh sleep 600 testing步骤: 运行test1.sh $ ./test1.sh 打开新的控制台并暂停subprocess。 $ kill -19 <sleep pid>或杀死-20 <sleep pid> 杀死父进程test1.sh $ kill <test1.sh pid> 你会发现步骤3之后,test2.sh和sleep 600退出。 错误,如果我只运行step1和step3,忽略step2,test2.sh和睡眠600进程将不会退出。 任何人都可以解释吗? 非常感谢。

在linux中是主动等待常见的

我正和一位同事辩论,如果你在Linux下主动等待,那么这是不好的编程。 他比bash脚本更有经验,并且说这是很常见的做法。 例如,我们尝试在插入WiFi USB后启动bash脚本。 如果有人在这里,他会每分钟仰望。 我将采取USB事件,当它是WiFi,启动我的脚本与该设备。 请帮助我们解决这个问题。

在花括号中parsing块

我试图parsing一个dhcpd.conf文件,看起来像这样: authoritative; subnet xxxx netmask xxxx { range xxxx xxxx; deny unknown-clients; default-lease-time 86400; max-lease-time 86400; option domain-name "bla"; option domain-name-servers xxxx; option broadcast-address xxxx; option subnet-mask xxxx; option routers xxxx; host host1 { hardware ethernet 00:e1:4c:68:00:53; fixed-address 1.1.1.1; } host host2 { hardware ethernet 01:e2:4d:69:01:54; fixed-address 2.2.2.2; } host host3 { hardware ethernet 02:e3:4e:70:02:55; […]