Флаг -d
для javac
ожидает аргумент, который является путем к каталогу.
Oracle говорит об этом флаге :
Установить каталог назначения для файлов классов. Каталог должен уже существовать;
javac
не будет его создавать. Если класс является частью пакета,javac
помещает файл класса в подкаталог, отражающий имя пакета, создавая каталоги по мере необходимости.
Однако вы указываете аргумент /home/sk/Desktop/abc*.java
, который совсем не похож на путь к каталогу.
Вы имели в виду / home / sk / Desktop /
? Или вам вообще нужен флаг -d
? Возможно, вы этого не сделаете, и что abc * .java
- это исходные файлы Java, которые вы хотите скомпилировать.
Или вы хотите -d / home / sk / Desktop / /home/sk/Desktop/abc*.java
.
Команда javac
в вашем скрипте не работает. На это указывает сообщение Usage: javac <options> <source files>
на снимке экрана. Это, в свою очередь, привело к сбою команды mv
, поскольку для перемещения не были созданы файлы классов Java. Что, в свою очередь, привело к сбою загрузчика классов и генерации стека ошибок.
Чтобы исправить это, вам нужно изменить команду javac
с:javac -classpath /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar -d /home/sk/Desktop/abc*.java
К:javac -classpath /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar -d /home/sk/Desktop/abc/ /home/sk/Desktop/abc/*.java
Это скомпилирует все файлы Java в /home/sk/Desktop/abc и создаст соответствующий файл класса для каждого файла Java.
Это может быть опасно, так как в будущем вы можете поместить в этот каталог больше java-файлов, чем просто файл подсчета слов, с которым вы сейчас работаете.