在編寫shell腳本時遇到cd命令無法執(zhí)行
原腳本log.sh
if [[ $dbname = "logs" ]]
then
echo "是別的是logs";
cd /home/logs/;
執(zhí)行sh log.sh 之后發(fā)現(xiàn)并沒有進(jìn)入/home/logs,還是在原文件夾,搜索之后改為
source log.sh解決問題
錯誤原因:
1.在shell在執(zhí)行腳本的時候,會創(chuàng)建一個子shell,并在子shell中逐條執(zhí)行腳本中的指令
2.子shell會從父shell中繼承了環(huán)境變量,但是執(zhí)行后不會改變父shell的環(huán)境變量
3.在子shell中的操作和環(huán)境變量不會影響父進(jìn)程,在執(zhí)行完shell后又回到了父進(jìn)程
解決原因:
- source 命令可以在當(dāng)前的shell環(huán)境下執(zhí)行腳本,不會創(chuàng)建子shell ,直接影響父進(jìn)程。source命令可直接換成 “.”