您能否向我解释以下测试脚本的输出:
# 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)
所以把戏也没有。
在我的脚本中,我几乎总是使用转义序列来表示颜色:
R='\e[0m'
g='\e[0;32m'
echo -e "${g}green text${R}"
Run Code Online (Sandbox Code Playgroud)
我想制作-e默认行为,所以我可以省略它.怎么样?
我将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本身生成随机的东西或计数器?