Articles of bash

了解bash中的exec

在阅读了关于exec内build工程的解释之后,我明白它的基本function是replace当前进程而不分叉。 它似乎也被用于redirectI / O和在当前进程中closures文件描述符,这使我感到困惑。 这是一些无关的额外的事情exec吗? 在“取代现在的过程”的背景下能够理解吗? 而如何结合进程替代,如exec 3< <(my program) ?

在bash中从python函数收集返回值

我正在实现一个将调用python脚本的函数/方法的bash脚本。 我想收集这个函数的返回值到调用bash脚本中的局部variables。 try1.sh包含: #!/bin/sh RETURN_VALUE=`python -c 'import try3; try3.printTry()'` echo $RETURN_VALUE 现在python脚本: #!/usr/bin/python def printTry(): print 'Hello World' return 'true' 关于删除bash脚本: $./tr1.sh Hello World 没有“真”或在那个地方任何其他types的回声标准输出所需。 另外一件事,我希望能够做的是,我的avtual python代码将有大约20-30个函数返回我的软件状态机的各种状态值,我会从bash脚本中调用这些函数。 在bash脚本中,我必须将这些返回值存储在本地variables中,这些variables将在调用bash脚本中实现的状态机逻辑中进一步使用。 对于每个值,我会做python -c'import python_module; python_module.method_name',这将重新枚举一次又一次,我不想要的状态机的定义状态。 我想避免使整个python脚本只用于调用一个函数。 那可能吗? 在这里可以想到什么可能的解决scheme/build议/想法? 我将不胜感激。 为了阐明我的意图,任务是让python脚本replace一部分bash脚本以提高可读性。 bash脚本实际上非常大(约15000行),因此不能完全由一个单独的python脚本replace。 所以可以被改进的部分可以被python替代。 另外,我曾想过在下面的评论中用Victor的build议来replace整个bash脚本,但是在我的情况下这是不可行的。 因此,我将不得不将状态机分成bash和python,其中python将有一些必需的方法返回bash脚本所需的状态值。 问候,优素福Husainy。

如何比较bash中的两个范围列表?

使用bash脚本(Ubuntu 16.04),我试图比较两个范围列表:file1中的任何范围中的任何数字是否与file2中的任何范围中的任何数字一致? 如果是,则在第二个文件中打印行。 在这里,我将每个范围设置为2个制表符分隔的列(在file1中,行1代表范围1-4,即1,2,3,4)。 真正的文件是相当大的。 文件1: 1 4 5 7 8 11 12 15 文件2: 3 4 8 13 20 24 期望的输出: 3 4 8 13 我最好的尝试是: awk 'NR=FNR { x[$1] = $1+0; y[$2] = $2+0; next}; {for (i in x) {if (x[i] > $1+0); then {for (i in y) {if (y[i] <$2+0); then {print […]

基于文件系统中的位置的Shell提示符

我必须在根文件系统下的三个主目录下工作 – home / username,project和scratch。 我想我的shell提示符显示我在哪些顶级目录。 这是我正在做的事情: top_level_dir () { if [[ "${PWD}" == *home* ]] then echo "home"; elif [[ "${PWD}" == *scratch* ]] then echo "scratch"; elif [[ "${PWD}" == *project* ]] then echo "project"; fi } 然后,我将PS1导出为: export PS1='$(top_level_dir) : ' 不幸的是,这不是我想要的。 我home :为我的提示,当我在我的家目录,但如果我切换到草稿或项目,然后提示不会改变。 我不明白bash脚本很好,所以我将不胜感激任何帮助来纠正我的代码。

为什么期望让过程打开它的STDERR?

我想为一个进程设置超时,这是我的shell。 我使用期望来做到这一点,以避免其他软件包的依赖。 test.sh #!/bin/bash # $1 timeout in seconds # $2 command timeout() { time=$1 shift # start the command in a subshell to avoid problem with pipes # (spawn accepts one command) -noecho command="/bin/sh -c \"$*\"" expect -c "set echo \"-noecho\";set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { […]

Bash脚本来读取文件

不知道为什么最后一行不切“从脚本: #!/bin/bash FILENAME=$1 while read line do cut -d '"' -f2 echo $line done < $FILENAME $ cat file "1" test "2" test "3" test "4" test "5" test 如果我用下面的命令运行这个脚本: $ ./test file 2 3 4 5 "1" test

如何从Bash中的string中删除重复的字符?

我有一个string cabbagee 我想删除重复的字符。 如果我使用tr -s,它将删除序列中的重复字符。 但是我的期望输出是 cabge 感谢任何人都可以帮助我。 提供的答案是正确的,但我不能使用awk,所以我用: #!/usr/bin/bash key=$1 len=${#key} mkey="" for (( c=0; c<len; c++ )) do tmp=${key:$c:1} echo $mkey | grep $tmp >/dev/null 2>&1 if [ "$?" -eq "0" ]; then echo "Found $tmp in $mkey" else mkey+=$tmp fi done echo $mkey

networking掩码validation似乎不工作在bash脚本中使用正则expression式,而IPvalidation工作正常

我写了一个简单的脚本来validationIP地址和networking掩码如下 #!/bin/bash validFormatIP() { echo $1 | grep -w -E -o '^(25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1]?[1-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' > /dev/null if [ $? -eq 0 ] then echo "Valid ipaddress" else echo "Inalid ipaddress" fi } validNetMask() { echo $1 | grep -w -E -o '^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)' > /dev/null if [ $? -eq 0 ] then echo "Valid netmask" else echo "Invalid […]

有没有办法看到一个path的所有中间目录的权限..?

我有一个文件path..是否有任何单一的命令来查看path中的所有中间目录的文件/目录权限..?

Linuxpipe道(convert – > pdf2ps – > lp)

好的,我可以打印一个PDF文件, pdf2ps file.pdf – | lp -s 但是现在我想用convert来合并几个PDF文件,我可以这样做: convert file1.pdf file2.pdf merged.pdf 它将file1.pdf和file2.pdf合并到merged.pdf中 ,target可以replace为' – '。 题 我怎么可以pipe转换成pdf2ps ,然后再转换为lp ?