Как записать Программу Java / комбинация Сценария оболочки, таким образом, что можно назвать программу Java как удаленную команду и все же предоставить локальный файл?

NOHUP SCP SHINTO @ Источник: / Главная / Data (Hidden)

Временно останавливается Команда с

Ctrl + Z

Направьте на фоне команды, тип:

BG

YO может проверить процесс:

задания

0
13.04.2017, 15:36
4 ответа
[115573]Я ничего не знаю о Java, но могу показать вам доказательство концепции. Скажем, у нас есть [115991]localfile.txt[115992]:

, а на удалённой машине у нас есть [115993]remote.sh[115994]:

  1. Обратите внимание, что скрипт на удалённой машине вызывает программу, которая [115995] читается из

  2. stdin[115998]. Затем передайте содержимое [115999]localfile.txt[116000] вашей команде ssh:

Ваша Java-программа пытается прочитать [116001]файл[116002], который не существует на удаленной машине. Думаю, вы можете попробовать подделать локальный файл.

Измените [116003]remote.sh[116004] на:

и вызовите его командой

Думаю, было бы проще изменить эту часть в вашей Java-программе на чтение с [116005]stdin[116006].

Я [116007] думаю [116008] может стать неприятным, если [116009]localfile.txt[116010] содержит что-нибудь, что может быть интерпретировано оболочкой как расширяемое (например, [116011]*[116012]), но это для вас, чтобы понять.[115588].

3
28.01.2020, 02:17
[115645] Локальный файл, по определению, находится на вашей локальной машине. java-программа находится на удаленной машине. Удаленная машина не знает о вашем локальном файле, и в любой производственной ситуации, вероятно, не имеет разрешения на его прочтение. Я могу придумать три общих подхода к этой ситуации:

  • 1) Измените вашу Java-программу на чтение из stdin, а не из файла. Тогда ваш текущий синтаксис [116091]$ ssh имя пользователя@xyz ReadFirstLine < localfile.txt[116092] будет работать.

    • 2) скопируйте ваш файл с локальной машины на удаленную перед запуском java-программы. scp localfile.txt имя пользователя@xyz Убедитесь, что вы поместили его в каталог, который будет рабочим каталогом вашей java-программы.
    • 3) Установите удалённый каталог на вашем удалённом компьютере на ваш локальный компьютер. Это имеет самую большую установку, но это решение наиболее приближено к тому, что вы просите. Это позволит вам вносить изменения в файл локально, и удалённая машина увидит эти изменения. Смотрите этот ответ для получения более подробной информации о подключении удаленной директории.
    • https://stackoverflow.com/questions/232269/how-to-mount-a-linux-directory-from-a-different-pc-to-your-local-linux-pc
    • Аргумантом к java-программе будет путь [116095], как он указан на удаленной машине[116096].
  • На локальной машине: /директория/которые/были/общались/локальный файл.txt

    На удаленной машине: /path/to/mounted/directory/on/remote/host/localfile.txt

    0
    28.01.2020, 02:17
    [115661]Проблема в том, что перенаправление оболочки (<) отправляет файл по ssh туннелю. А класс Java ожидает не файл, а строку с "именем файла" локального файла, который будет прочитан с помощью FileReader.
  • Вместо того, чтобы передавать имя файла FileReader, читайте со стандартного входа.
  • Использовали это как ссылку: [116097]https://stackoverflow.com/questions/5724646/how-to-pipe-input-to-java-program-with-bash

    Теперь ваш класс будет:

    Но для этой задачи я бы определенно использовал:

    :)[115672].

    2
    28.01.2020, 02:17
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.OutputStreamWriter;
    
    public class ReadFirstLine 
    {
        public static void main(String[] args) throws Exception 
        {
           String filename = args[0];
    
           BufferedReader iR  = new BufferedReader (new FileReader(filename));
           BufferedWriter oW = new BufferedWriter(new OutputStreamWriter(System.out));
    
           outputWriter.write(iR.readLine());
    
           iR.close();
           oW.close();
        }
    }
    
    0
    28.01.2020, 02:17

    Теги

    Похожие вопросы