[ShellScript] Hướng dẫn fix lỗi ambiguous redirect khi lập trình shell script

Khi bạn lập trình bash shell script thì bạn đôi khi sẽ gặp 1 trường hợp mang tên ‘ambiguous redirect‘. Thế nó là gì ? các trường hợp dẫn đến lỗi trên và giải pháp xử lý ?

Ví dụ lỗi :

# echo hello > ${TEST}
bash: ${TEST}: ambiguous redirect

# ./demo.sh
line 46: ${OUPUT_RESULTS}: ambiguous redirect

 
1. Trường hợp 1 – sai tên biến = giá trị biến rỗng

– Trong trường hợp này đơn giản là bạn cần kiểm tra lại xem tên biến bạn đang sử dụng cho output chuyển hướng có đúng hay chưa ? Nếu trong trường hợp chưa đúng thì fix cho đúng nhé.
– Cũng trong trường hợp này, bạn cần kiểm tra xem biến của bạn đã được set giá trị nào hay chưa ? Nếu giả sử trong flow code bạn có code để set giá trị biến $TEST , thì lỡ như trong trường hợp ngoài ý muốn biến của bạn không nhận được giá trị nào thì nó trở thành biến rỗng -> dẫn đến phát sinh lỗi.

Ví dụ :

# TEST="cuongqc.txt"
# echo "Thanh cong" >> $TEST
# echo "Thanh cong2" >> $TSET
bash: $TSET: ambiguous redirect

 
Giải pháp:
– Việc sai tên biến cũng đồng nghĩa biến có giá trị bằng rỗng.
– Kiểm tra lại tên biến !
– Kiểm tra giá biến có giá trị không rỗng hay không !

2. Trường hợp 2 – biến có cụm từ chứa khoảng trắng

– Trường hợp kế tiếp này, chúng ta sẽ đến với tình huống là biến $TEST không rỗng, có giá trị và đúng tên biến nhưng. …. : giá trị có chứa cụm từ có khoảng trống.

Ví dụ 2:

# TEST="cuong quach.txt"
# echo "Thanh cong" >> $TEST
bash: $TEST: ambiguous redirect

 
– Yo bạn thấy không, vì có khoảng trắng trong cụm từ giá trị của biến mà dẫn đến phát sinh lỗi này.

Giải pháp:
– Hãy luôn sử dụng dấu double-quote (” “) để rào chắn lại biến của bạn khi được gọi.
– Vì nếu bạn không để double-quote thì bash sẽ tự động chia giá trị biến có khoảng trắng $TEST ra để xử lý thay vì xử lý thành 1 cụm từ, việc double-quote sẽ chỉ cho bash việc phải xử lý giá trị biến đó thành 1 cụm duy nhất.

# TEST="cuong quach.txt"
# echo "Thanh cong" >> "$TEST"

 
Ok như vậy 2 tình huống trên là 2 trường hợp dẫn đến phát sinh lỗi “ambiguous redirect” các bạn nhé. Cám ơn các bạn đã theo dõi bài viết.

Previous article[Linux] Ba cách xác định ổ cứng SSD hay HDD trên Linux
Next article[Ebook] Lý thuyết mật mã và an toàn thông tin (2002) – Phan Đình Diệu – Download PDF
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !