Articles of bash

在Linux和BSD中使用和不使用shebang的Bash脚本执行

如何和谁决定什么时候执行一个Bash类的脚本作为一个二进制文件执行没有shebang? 我想用 shebang运行一个正常的脚本是用binfmt_script Linux模块来处理的,它会检查一个shebang,parsing命令行并运行指定的脚本解释器。 但是如果有人在不使用shebang的情况下运行脚本,会发生什么? 我已经testing了直接执行execv方法,发现那里没有内核魔法 – 即像这样的文件: $ cat target-script echo Hello echo "bash: $BASH_VERSION" echo "zsh: $ZSH_VERSION" 运行只执行execv调用的编译的C程序会产生: $ cat test-runner.c void main(){ if(execv(“./ target-script”,0)== -1) PERROR(); } $ ./test-runner ./target-script:执行格式错误 但是,如果我从另一个shell脚本执行相同的操作,它将使用与原始shell解释器相同的shell解释器运行目标脚本: $ cat test-runner.bash #!/斌/庆典 ./target-script $ ./test-runner.bash 你好 bash:4.1.0(1) – 释放 zsh的: 如果我对其他shell执行相同的技巧(例如,Debian的默认sh – /bin/dash ),它也可以工作: $ cat test-runner.dash #!/斌/破折号 ./target-script […]

如何使用bash将一行文本添加到文件的中间?

我正在尝试在bash脚本的文本文件的中间添加一行文本。 具体来说,我想添加一个名称服务器到我的/etc/resolv.conf文件。 就目前而言,resolv.conf如下所示: # Generated by NetworkManager domain dhcp.example.com search dhcp.example.com nameserver 10.0.0.1 nameserver 10.0.0.2 nameserver 10.0.0.3 我的目标是添加nameserver 127.0.0.1高于所有其他名称服务器行,但低于上述任何文本。 最后,我想我的resolve.conf文件看起来像这样: # Generated by NetworkManager domain dhcp.example.com search dhcp.example.com nameserver 127.0.0.1 nameserver 10.0.0.1 nameserver 10.0.0.2 nameserver 10.0.0.3 这怎么可能通过一个bash脚本? 这是sed或awk可以做的吗? 还是会创造性地重新创build文件是我的最佳举措?

replacesed中的控制字符

我需要在linux的文本文件中replace所有出现的控制字符CTRL + A(SOH / ascii 1),这怎么能在SED中实现呢?

将命令输出存储到bash中的variables时,如何保留换行符?

我在Linux上使用bash shell。 我有这个简单的脚本… #!/bin/bash TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac` echo $TEMP 但是,当我运行这个脚本 ./temp.sh 所有的输出打印没有回车/新行。 不知道是否将输出存储到$ TEMP或echo命令本身。 如何将命令的输出存储到variables并保留换行符/回车符?

Linux非阻塞FIFO(按需日志)

我喜欢根据需要logging节目输出。 例如。 输出被logging到terminal,但是另一个进程可以随时挂载当前的输出。 经典的方法是: myprogram 2>&1 | tee /tmp/mylog 和按需 tail /tmp/mylog 但是,这将创build一个不断增长的日志文件,即使没有使用,直到驱动器空间不足。 所以我的尝试是: mkfifo /tmp/mylog myprogram 2>&1 | tee /tmp/mylog 和按需 cat /tmp/mylog 现在我可以随时读取/ tmp / mylog。 但是,任何输出都会阻塞程序,直到读取/ tmp / mylog。 我喜欢fifo来刷新所有未读回的数据。 怎么做?

如何通过多个sudo和su命令find原始用户?

当通过sudo或su运行脚本时,我想获取原始用户。 这应该发生,无论多个sudo或su在彼此内部运行,特别是sudo su – 。

`sh`和`source`有什么区别?

sh和source什么区别? source: source filename [arguments] Read and execute commands from FILENAME and return. The pathnames in $PATH are used to find the directory containing FILENAME. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed. 对于man sh : NAME bash – GNU Bourne-Again SHell SYNOPSIS bash [options] [file] COPYRIGHT Bash is […]

为什么我不能用Bash For-Loop使用Unix Nohup?

例如,这一行失败: $ nohup for i in mydir/*.fasta; do ./myscript.sh "$i"; done > output.txt& -bash: syntax error near unexpected token `do 什么是正确的方法来做到这一点?

在Linux上找不到Java命令

在Oracle Enterprise Linux中,当我键入java时, bash: java: command not found 我已经安装了Java 1.6,我有以下几点 sudo update-alternatives –config java There are 2 programs which provide 'java'. Selection Command ———————————————– * 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java + 2 /usr/java/jre1.6.0_24/bin/java 我该如何解决这个问题? 谢谢

从shell脚本parsing文件中的键/值的代码

我有一个文件,我需要通过使用shell脚本的键来查找值。 该文件如下所示: HereIsAKey This is the value 我怎么能做这样的事情: MyVar=Get HereIsAKey 然后MyVar应该等于“这是价值”。 密钥没有空格,值应该是密钥后面的空格。