У меня есть следующий скрипт, который должен перебирать содержимое каталога HDFS
#!/bin/bash
PATHS=$(java MyJava)
DELIM='|'
HDFSPATH=${PATHS}${DELIM}
while [[ ${HDFSPATH} ]]; do
PATHARR=( "${HDFSPATH%%"DELIM"*}" );
HDFSPATH=${HDFSPATH#*"$DELIM"};
done
SOURCEPATH=${PATHARR[0]}
for FILENAME in `hdfs dfs -ls ${SOURCEPATH} | awk '{print $NF}' | grep .txt$ | tr '\n' ' '`; do
echo ${FILENAME};
done
И я запускаю его следующим образом
sh myscript.sh
Файл .java:
public class MyJava {
public static void main(String[] args) {
System.out.println("/a/b/c/" + "|" + "/d/e/f");
}
}
Что я ожидаю, это
/a/b/c/file1.txt
/a/b/c/file2.txt
Но я получаю
/a/b/c/file1.txt /a/b/c/file2.txt
Символ новой строки заменяется пробелом, и цикл запускается только один раз. Но когда я запускаю цикл for непосредственно через оболочку, я получаю ожидаемый результат. Может ли кто-нибудь помочь мне с этим?
Сценарий выполняется на компьютере с Linux.