Câu hỏi Tập lệnh Bash không thực hiện lệnh từ PATH


Tôi có tập lệnh đơn giản này:

#!/bin/bash
echo ${HADOOP_HOME}
$(hadoop fs -ls)

Đầu ra là:

/opt/hadoop-0.20.2-cdh3u2
./hello.sh: line 3: Found: command not found

Vì vậy, bash chắc chắn thấy HADOOP_HOME. Tôi đã đặt nó trong ~ / .profile và thêm đường dẫn vào thư mục bin:

export HADOOP_HOME="/opt/hadoop-0.20.2-cdh3u2"
export PATH=$PATH:$HADOOP_HOME/bin

Nếu tôi chỉ đơn giản gọi lệnh trong giao diện điều khiển tất cả mọi thứ hoạt động nhưng bên trong một kịch bản nó không. Tôi đang làm gì sai?


2
2018-04-29 07:35


gốc




Các câu trả lời:


Nó không phải là vấn đề với echo ${HADOOP_HOME} lệnh. Một nguyên nhân gây ra lỗi là $(hadoop fs -ls)

Bạn phải cung cấp dòng thứ 3 trong tập lệnh đó echo $(hadoop fs -ls). Vì vậy, kịch bản sẽ trông giống như,

#!/bin/bash
echo ${HADOOP_HOME}
echo $(hadoop fs -ls)

Nếu bạn đưa ra lệnh như thế này $(hadoop fs -ls), bash phân tích nó và tìm giá trị của nó. Và giá trị được thành lập lại được phân tích cú pháp bằng bash.

Thí dụ:

$ var=4
$ $var
4: command not found
$ echo $var
4

IMO, giá trị hoặc đầu ra của lệnh hadoop fs -ls Là Found, chuỗi này được tìm thấy lại được phân tích cú pháp bằng bash khi bạn đưa ra lệnh như thế này $(hadoop fs -ls). Vì vậy, thông báo lỗi dưới đây được hiển thị trong khi thực thi tập lệnh hello.sh,

./hello.sh: line 3: Found: command not found

2
2018-04-29 07:40