标签: bash4

每次运行 script.sh 并将输出保存到文件时,如何记录 script.sh 中的错误?

如何将运行脚本时的错误输出保存到文件中?我的代码如下,但代码不会跟踪错误并将错误保存到 test.log14。有人能给我提示一下我的代码中可能有什么问题吗?

 LOGFILE=/usr/local/etc/backups/test14.log

 "$(date "+%m%d%Y %T") : Starting work" >> $LOGFILE 2>&1
Run Code Online (Sandbox Code Playgroud)

bash bash4

7
推荐指数
2
解决办法
4万
查看次数

bash脚本如何受bash4版本的影响?

bash4 在纸上看起来不错,我想我会构建它并给它一个试驾.

同时...

有没有做过同样关心的人分享他们的期待?

听到旧bash代码的任何问题会特别有趣.

bash shell bash4

6
推荐指数
1
解决办法
392
查看次数

在BASH中,如何从使用HTML <textarea> </ textarea>编写的文件中存在的变量替换\ r \n

我如何更换\ r?

#!/bin/bash
...

# setup
if [[ $i =~ $screen ]]; then

    ORIGINAL=${BASH_REMATCH[1]}          # original value is: 3DROTATE\r
    AFTER   =${ORIGINAL/\\r/}            # does not replace \r
    myThirdPartyApplication -o $replvar  # FAILS because of \r

fi
Run Code Online (Sandbox Code Playgroud)

linux bash fedora bash4 archlinux

6
推荐指数
3
解决办法
2万
查看次数

如何在 command_not_found_handle 中更改当前工作目录

我正在尝试在 Bash 中编写一个未找到的句柄,它执行以下操作:

  1. 如果 $1 存在并且它是一个目录,则cd进入它。
  2. 如果 $1 存在于用户定义的目录中$DEV_DIR,`cd 进入它。
  3. 如果前面的条件不适用,则失败。

现在我有这样的事情:

export DEV_DIR=/Users/federico/programacion/

function command_not_found_handle () {
    if [ -d $1 ]; then          # the dir exists in '.'
        cd $1
    else
        to=$DEV_DIR$1
        if [ -d $to ]; then
            cd $to
            echo `pwd`
        else
            echo "${1}: command not found"
        fi
    fi
}
Run Code Online (Sandbox Code Playgroud)

尽管它似乎在工作(该echo pwd命令打印了预期的目录),但实际 shell 中的目录并没有改变。

我的印象是,因为这是我.bashrc的 shell 中的一个函数,所以我不会分叉,我可以这样做,cd但显然这不起作用。任何有关如何解决此问题的提示将不胜感激。

bash shell sh bash4

5
推荐指数
1
解决办法
1570
查看次数

什么ncurses框架可用于BASH?

是否还有一些用于bash的文本用户界面(TUI)框架(除此之外)?:http://code.google.com/p/bashsimplecurses/

  • 我想接受用户输入(数据输入)
  • 处理条目

linux bash tui ncurses bash4

5
推荐指数
1
解决办法
7453
查看次数

在 bash 中使用正则表达式在字符串中进行多个匹配

一直在寻找有关 bash 正则表达式的一些更高级的正则表达式信息,但没有找到太多相关信息。

这是一个简单的字符串的概念:

myString="DO-BATCH BATCH-DO"

if [[ $myString =~ ([[:alpha:]]*)-([[:alpha:]]*) ]]; then
 echo ${BASH_REMATCH[1]} #first perens
 echo ${BASH_REMATCH[2]} #second perens
 echo ${BASH_REMATCH[0]} #full match
fi

outputs:
BATCH
DO
DO-BATCH
Run Code Online (Sandbox Code Playgroud)

很好,它完成了第一场比赛(BATCH-DO),但是我如何拉第二场比赛(DO-BATCH)?我只是在这里画一个空白,找不到关于 bash 正则表达式的太多信息。

bash bash4

4
推荐指数
1
解决办法
2万
查看次数

等号代码运算符在bash 4中不起作用

在使用bash版本3的服务器中,我这样做:

bash3$ e="tar xfz"; [[ "$e" =~ "^tar" ]] && echo 0 || echo 1
0
Run Code Online (Sandbox Code Playgroud)

但是当我在bash版本4中执行相同的命令时

bash4$ e="tar xfz"; [[ "$e" =~ "^tar" ]] && echo 0 || echo 1
1
Run Code Online (Sandbox Code Playgroud)

我在CentOS,Fedora和Ubuntu中尝试过它并得到了相同的结果.怎么了?

regex bash bash4

4
推荐指数
1
解决办法
277
查看次数

使用 bash 4 语法将 Makefile 中字符串的第一个字母大写

在 bash 4(及更高版本)中,要大写存储在 variable 中的字符串的第一个字母L1,我可以执行以下操作:

L1=en
Ll1=${L1^}
echo $Ll1
Run Code Online (Sandbox Code Playgroud)

这打印En.

我正在尝试在 Makefile 中做类似的事情,但我无法使${L1^}语法起作用。

SHELL := /bin/bash

L1 = en
Ll1 := $(shell echo ${L1^})

all:
    @echo $(Ll1)
Run Code Online (Sandbox Code Playgroud)

产生空白输出。

我可以在不求助于 tr/sed 的情况下使用这种 bash 语法吗?

PS我确实需要将它分配给一个变量而不是直接回显它。我正在使用 bash 4.3.48 和 GNU make 4.1。

bash makefile capitalization gnu-make bash4

4
推荐指数
1
解决办法
1441
查看次数

bash中的关联数组不在循环内存储值

这是我的$a输出:

[root@node1 ~]# echo "${a}"
/dev/vdc1 /gfs1
/dev/vdd1 /elastic
mfsmount /usr/local/flytxt
Run Code Online (Sandbox Code Playgroud)

我必须将这些存储在关联数组中fsmounts,第一列作为键,第二列作为值。
这是我的代码:

declare -A fsmounts
echo "$a" | while read i ; do key=$(echo "$i" | awk '{print $1}'); value=$(echo "$i" | awk '{print $2}');fsmounts[$key]=$value;  done;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在循环外打印时

[root@node1 ~]# echo ${fsmounts[/dev/vdb1]}
Run Code Online (Sandbox Code Playgroud)

空白是输出。我认为关联数组 fsmounts 实际上并没有存储值。请帮我。

但我实际上可以fsmounts[$key]在循环内回声。看到这个:

echo "$a" | while read i ; do key=$(echo "$i" | awk '{print $1}'); value=$(echo "$i" | awk '{print $2}');fsmounts[$key]=$value; echo ${fsmounts[$key]};  done;
/gfs1
/elastic
/usr/local/flytxt
Run Code Online (Sandbox Code Playgroud)

bash associative-array bash4

4
推荐指数
1
解决办法
1228
查看次数

如何在通过参数传递它的函数中更新关联数组?

我有以下代码读取fieldsJson 文件的所有内容(路径是PRIVATE_REGISTRATION_FILE并将它们存储到PRIVATE_FIELDS我稍后在代码中查询的关联数组 ( ) 中:

declare -A PRIVATE_FIELDS
for PRICING_FIELD in $(jq -c -r '.fields[]' "${PRIVATE_REGISTRATION_FILE}")
do
  FIELD_KEY=$(jq -r '.label' <<< "${PRICING_FIELD}")
  PRIVATE_FIELDS["${FIELD_KEY}"]=${PRICING_FIELD}
done
Run Code Online (Sandbox Code Playgroud)

问题是我对多个文件执行了多次此操作,即使逻辑始终相同。

因此,我想将这个逻辑提取到一个函数中,但我很难将 map 参数传递给它。

这是我尝试的:

function update_array
{
    FILE_NAME=$1
    eval "declare -A MAP="${2#*=}
    for PRICING_FIELD in $(jq -c -r '.fields[]' "${FILE_NAME}")
    do
        FIELD_KEY=$(jq -r '.label' <<< "${PRICING_FIELD}")
        MAP["${FIELD_KEY}"]=${PRICING_FIELD}
    done
}
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

declare -A PRIVATE_FIELDS
update_array "myFile.json" "$(declare -p PRIVATE_FIELDS)"
Run Code Online (Sandbox Code Playgroud)

但是它不起作用,地图仍然是空的。

echo ${PRIVATE_FIELDS["someKey"]}
>>> (empty)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了这个答案中提出的每个解决方案但没有一个有效。我究竟做错了什么?

bash …

bash bash4

4
推荐指数
1
解决办法
45
查看次数