Articles of bash

全局variables中更新的值在Shell脚本中丢失

有一个奇怪的问题,其中一个“全局variables”的值更新在一个函数,但更新的价值是失去了,当我检查在其他function。 任何帮助,将不胜感激。 #!/bin/bash FINAL_RESULT=""; COMMAND_RESULT=""; function init() { USERNAME="root"; DF_THRESHOLD="20"; DF_COMMAND="df -Pkh"; } function executeCommand() { local RESULT; SERVER=$(hostname); RESULT=$($1); FINAL_RESULT="$FINAL_RESULT ————————– Executing command : \"$1\" on \"$SERVER\" ————————–" echo "Updating FINAL_RESULT to $FINAL_RESULT" # Updated value is present echo "$RESULT" COMMAND_RESULT="$RESULT" } function getCommandResult() { executeCommand "$1"; echo "$COMMAND_RESULT" | while read eachLine do […]

拦截input设备发送的数据

我试图logging通过USB连接到电脑的钢琴来的任何input数据。 $ lsusb … Bus 003 Device 046: ID fc08:0101 …. Bus 003 Device 046: ID fc08:0101是我的钢琴。 如果我做$ cat /dev/bus/usb/003/046我得到一些奇怪的东西: P e 2 $ $A$$ $ $ % % 另外,我写了一个NodeJS脚本,它应该创build一个读取stream和日志数据: var Fs = require("fs"); var str = Fs.createReadStream("/dev/bus/usb/003/046"); str.on("data", function (chunk) { console.log("data: " + chunk.toString()); }); str.on("error", function (chunk) { console.log("error" + chunk.toString()); }); […]

为什么我的awk结果与示例有所不同?

我正在学习awk,当我在这里尝试示例代码时(gnu.org awk用户指南,第4.6节),我得到了一些不同的答案。 具体来说,如果“空闲”列是空的(6个空格),脚本正在从下一个“非空”列(即“JCPU”列)提取数据。 此外,当它试图将“15天”转换为秒(awk正在为其“空闲”值select下一列)时,“空闲”列将被跳过。 我试图找出为什么我的awk结果不符合例子的结果。 我已经确保我的列宽与FIELDWIDTHS参数中的列宽相匹配。 我在64位Ubuntu 14.04 LTS上运行 我的结果是: hzuo ttyV0 9 hzang ttyV3 50 eklye ttyV5 7 dportein ttyV6 107 gierd ttyD3 1 dave ttyD4 4 brent ttyp0 286 dave ttyq4 46

如何根据参数阻止sudo命令

我有一个像这样的root权限的文件 [root@testbox ~]# ls -l /etc/resolv.conf -rw-r–r– 1 root root 113 Feb 21 21:29 /etc/resolv.conf 我使用/ etc / sudoer为我的用户启用了无密码的sudo %mayur ALL=(ALL) NOPASSWD: ALL 我想要一些方法,如果我试图编辑这个特定的文件,我被阻止。 例如..我想阻止这些命令基于文件名 $ echo 123 | sudo tee /etc/resolv.conf ## SHOULD GET BLOCKED $ touch newfile | echo 123 > newfile | sudo cp newfile /etc/resolv.conf ## SHOULD GET BLOCKED 我的努力: %mayur […]

如何将SIGINT传递给孙子(以及如何以编程方式执行此操作)

使用linux / bash / python3,我创build了一个孙subprocesssleep 123 。 当我调用p.terminate() ,这会杀死subprocess(init接pipe孙子sleep 123 )。 不过,从python解释器我仍然可以按Ctrl + C来杀死孙子。 我的问题是:1)如果python解释器现在已经通过init初始化,那么它是如何发送一个SIGINT给grand-child的; 2)我是如何以编程方式杀死孙子的。 我已经尝试过p.send_signal(signal.SIGINT) ,玩stdin=PIPE等,但无法让它工作。 gnr@localhost: python3 Python 3.3.1 >>> from subprocess import PIPE, Popen >>> p = Popen(['bash', '-c', '(sleep 123)']) gnr@localhost: ps -AF | grep sleep gnr 5081 5078 0 26526 1168 6 14:03 pts/26 00:00:00 bash -c (sleep 123) […]

Sed未能取代UTF-8编码

我正在尝试做一些文件内容转换。 我正在使用文本编码的Linux操作系统: echo $LANG en_US.UTF-8 我正在通过Window – > Translation – > Remote character set – > UTF-8从Puttyterminal进行访问 我有以下日志文​​件,我想要做转换: cat test.log | head 这是我在terminal中看到的/如果我用nano编辑文件/如果我将terminal内容复制并粘贴到Windows中的记事本中(注意在第一个IP之后注意三个破折号): 10.0.2.4 – – – Cookie= – [11/Jun/2014:12:51:48 +0000] "GET /hub/ HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140429 Firefox/24.0 Iceweasel/24.5.0" "1.1.1.1" 这是我看到,如果我复制/粘贴内容到这里/写字板在Windows(注意第一个IP后面只有一个破折号): 10.0.2.4 – Cookie= – [11/Jun/2014:12:51:48 +0000] "GET /hub/ […]

linuxpipe道参数列表太长

我使用下面的bash脚本来删除超过$天的文件。 find / home / xxx / conf_ * -maxdepth 0 -mindepth 0 -type d -ctime +5 -exec rm -rf {} \; 但是,如果文件超过32000 +,我得到 / usr / bin / find:参数列表太长 我如何将列表修剪到只有20000?

只有在另一个实例没有运行时才使脚本运行

我有这个脚本,我在网上find从fifo读取并将其导入到mysql: # # Created by Tadghe Patrick Danu # #!/bin/bash if [ -e /tmp/mysql.pipe ]; then while [ -e /tmp/mysql.pipe ] do mysql -u syslog –password=mypassword syslogdb < /tmp/mysql.pipe done else mkfifo /tmp/mysql.pipe fi 我已经安排了这个脚本作为一个cron作业运行,但是,它每次运行时都会产生一个新的实例,所以当我看到这些进程时,我看到一堆正在运行的脚本。 只有在没有运行的情况下,我如何才能使其运行? 我想一次只运行一个这样的实例。 谢谢,

可能的“期望”只回答一些问题?

这个脚本的问题是,如果有任何yum更新,那么它仍然退出。 #!/usr/bin/expect spawn su -c "yum update" expect "Password: " send "secret\n" expect eof exit 我希望在那种情况下能够回答“是”或“否”。 题 except回答密码问题except ,是否有可能只有其余部分是互动的?

Bash编程无限循环

我是新来的bash,我正在尝试从在线导师那里学习。 当我尝试下面的代码在我的电脑(Windows)与xserver我越来越 1) Hello 2) Quit #? bad option #? 而且这个继续无限,我不应该得到。 我用./programname.txt来运行该文件,我的代码是 #!/bin/bash OPTIONS="Hello Quit" select opt in $OPTIONS; do if [ "$opt" = "Quit" ]; then echo done exit elif [ "$opt" = "Hello" ]; then echo Hello World else clear echo bad option fi done 有人请帮忙。 提前致谢