エイリアスがbashコマンドを直接実行するのとは異なる動作をするのはなぜですか?

エイリアスがbashコマンドを直接実行するのとは異なる動作をするのはなぜですか?

私のログファイルを開くためにエイリアスを作成しようとしています。

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

エイリアスを実行するとき

open_log

私は持っています

尾:読み取り用に '/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'

おすすめ記事