小编bar*_*rak的帖子

bash设置-x和流

您能否向我解释以下测试脚本的输出:

# prepare test data
echo "any content" > myfile

# set bash to inform me about the commands used
set -x

cat < myfile
Run Code Online (Sandbox Code Playgroud)

输出:

+cat
any content
Run Code Online (Sandbox Code Playgroud)

即,为什么以+开头的行不显示“ <myfile”位?

如何迫使bash做到这一点。我需要通知用户脚本的执行情况,如下所示:

mysql -uroot < the_new_file_with_a_telling_name.sql
Run Code Online (Sandbox Code Playgroud)

我不能。

编辑:其他上下文:我使用变量。原始代码:

SQL_FILE=`ls -t $BACKUP_DIR/default_db* | head -n 1` # get latest db
mysql -uroot mydatabase < ${SQL_FILE}
Run Code Online (Sandbox Code Playgroud)

-v不会展开变量,并且cat file.sql | mysql会产生两行:

+mysql
+cat file.sql
Run Code Online (Sandbox Code Playgroud)

所以把戏也没有。

bash

3
推荐指数
1
解决办法
9380
查看次数

unix echo默认参数

在我的脚本中,我几乎总是使用转义序列来表示颜色:

R='\e[0m'
g='\e[0;32m'
echo -e "${g}green text${R}"
Run Code Online (Sandbox Code Playgroud)

我想制作-e默认行为,所以我可以省略它.怎么样?

unix echo

3
推荐指数
1
解决办法
596
查看次数

在sed的'/'中生成一个随机数/字符串或迭代器

我将Jan Goyvaerts的电子邮件正则表达式改编为bash函数,用于管道中匿名化电子邮件地址:

function remove_emails { 
    sed -r "s|\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b|email.address@removed.com|gI"; 
}
Run Code Online (Sandbox Code Playgroud)

我在bash管道中使用的:

    mysqldump \
        -uuser \
        -ppass \
        db_name \
    | remove_emails \
    | gzip -c \
    | cat \
    > tmp.sql.gz
Run Code Online (Sandbox Code Playgroud)

工作正常,但现在,我想要有不同的随机电子邮件,我会满意:

email.address1@removed.com
email.address2@removed.com
Run Code Online (Sandbox Code Playgroud)

要么

eiyyzhupzftrvjwehbqp@removed.com
kwmbrshzmxqlrqatqpff@removed.com
Run Code Online (Sandbox Code Playgroud)

或任何不同且独特的东西

我对bash很满意,但是使用计数器,进程替换等因为sed仅调用一次而失败,所以

sed "s,sth,$(echo $RANDOM),g"
Run Code Online (Sandbox Code Playgroud)

和类似的东西不起作用,

是否有任何东西可以在sed本身生成随机的东西或计数器?

bash sed

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

标签 统计

bash ×2

echo ×1

sed ×1

unix ×1