banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Không gán biến trong shell script (file.sh) được  XML
  [Question]   Không gán biến trong shell script (file.sh) được 05/09/2014 22:02:39 (+0700) | #1 | 281534
[Avatar]
flygon
Member

[Minus]    0    [Plus]
Joined: 20/03/2013 11:16:50
Messages: 17
Offline
[Profile] [PM]
Mình xin vào thằng vấn đề luôn. Mình đã cố gắng thử gán biến trong file.sh và cho chạy file.sh, nhưng sau đó echo biến thì không có kết quả trả về. Cụ thể là:

Bình thường khi gán biến trên console thì mình gõ
Code:
[root@firewall ~]# EXTIF=`/sbin/route | grep -i 'default' | awk '{print$8}'`
[root@firewall ~]# echo $EXTIF
eth0


OK, câu lệnh hoạt động như mong muốn

Nhưng nếu mình ném câu lệnh gán biến trên vào trong file.sh và chạy

Code:
[root@firewall ~]# sh file.sh
[root@firewall ~]# echo $EXTIF

[root@firewall ~]


echo trả về kết quả là trống hoặc là kết quả cũ của phép gán trước đó (trên console) chứ không phải phép gán trong file.sh

Mình đang dùng CentOS 6.5. Mong được mọi người giúp đỡ về vấn đề này smilie (mình đã chmod +x file.sh)
[Up] [Print Copy]
  [Question]   Không gán biến trong shell script (file.sh) được 05/09/2014 22:25:28 (+0700) | #2 | 281535
[Avatar]
flygon
Member

[Minus]    0    [Plus]
Joined: 20/03/2013 11:16:50
Messages: 17
Offline
[Profile] [PM]
SOLVED.
Thay vì dùng sh file.sh thì mình dùng
Code:
. file.sh
thì lại được

mặc dù không hiểu tại sao câu lệnh sh lại không có tác dụng
[Up] [Print Copy]
  [Question]   Không gán biến trong shell script (file.sh) được 06/09/2014 00:38:57 (+0700) | #3 | 281536
bino1810
Member

[Minus]    0    [Plus]
Joined: 10/02/2012 10:38:28
Messages: 61
Location: /home/cuonglm
Offline
[Profile] [PM]
Một cách ngắn gọn:

- sh file.sh tạo tiến trình mới, thực thi trong một "shell environment" mới. Biến EXTIF chỉ tồn tại trong lúc tiến trình chạy. Khi tiến trình kết thúc, EXTIF không tồn tại.

- . file.sh hay là source file.sh đọc và thực thi các câu lệnh từ file.sh trong "shell environment" hiện tại.
There is more than one way to do it!
[Up] [Print Copy]
  [Question]   Không gán biến trong shell script (file.sh) được 09/09/2014 10:39:57 (+0700) | #4 | 281565
[Avatar]
flygon
Member

[Minus]    0    [Plus]
Joined: 20/03/2013 11:16:50
Messages: 17
Offline
[Profile] [PM]

bino1810 wrote:
Một cách ngắn gọn:

- sh file.sh tạo tiến trình mới, thực thi trong một "shell environment" mới. Biến EXTIF chỉ tồn tại trong lúc tiến trình chạy. Khi tiến trình kết thúc, EXTIF không tồn tại.

- . file.sh hay là source file.sh đọc và thực thi các câu lệnh từ file.sh trong "shell environment" hiện tại. 


À, ra là vậy. Cám ơn anh rất nhiều smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|