为什么别名的行为与直接运行 bash 命令不同?

为什么别名的行为与直接运行 bash 命令不同?

我正在尝试创建一个别名来打开我的日志文件

alias open_log='date=`date +%y%m%d`;sudo tail -n 10 ~/logs/reconfig-$date.log;'

当我运行该别名时

open_log

我有

tail:无法打开“/home/benu/logs/reconfig-.log”进行读取:没有这样的文件或目录

但如果我跑

我为该别名设置的内容

date=`date +%y%m%d`;sudo tail -n 10 ~/logs/reconfig-$date.log;

它工作得很好。

+ service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [  OK  ]
+ mkdir -p /etc/nginx/sites-available
+ cp /root/portal-data/sites-available/default-https /etc/nginx/sites-available/default
+ '[' '!' -f /etc/ssl/mywifibusiness.trg.telenet.be.cert.pem ']'
+ echo 'Error: Unable to find certificate at /etc/ssl/mywifibusiness.trg.telenet.be.cert.pem'
Error: Unable to find certificate at /etc/ssl/mywifibusiness.trg.telenet.be.cert.pem
+ exit 1
Error: Executing /home/benu/reconfig.d/70-ssc-portal.sh returned 1
Reconfigure aborted

为什么他们的行为不同?谁能详细说明一下吗?

如何修复我的别名以使其正常工作?

答案1

抱歉,@ihue。我一开始就错了。感谢@ilkkachu。

将别名与编辑前发布的命令行进行比较:

alias 'date=date +%y%m%d;sudo tail -n 10 ~/logs/reconfig-$date.log;'
date=`date +%y%m%d`;sudo tail -n 10 ~/logs/reconfig-$date.log;

别名缺少反引号。另外,反引号是一切都过时了。使用以下形式进行命令替换:$(command).

双引号的工作方式如下,每次设置别名时都会设置日期。

alias open_log="sudo tail -n 10 ~/logs/reconfig-$(date +%y%m%d).log"

单引号动态工作,在每次调用别名时设置日期。

alias open_log='sudo tail -n 10 ~/logs/reconfig-$(date +%y%m%d).log'

相关内容