Nano Hash - криптовалюты, майнинг, программирование

Передать скрипт с аргументами через stdin в виде строки в bash

В настоящее время у меня возникла проблема с передачей скрипта с аргументами в bash. Ограничение в том, что я могу передать их как строку (см. $COMMAND)

ssh user@server 'bash -s' < "$COMMAND"

если моя $COMMAND содержит "foo.sh bar baz", я получу ошибку no such file or directory: foo.sh bar baz

Кроме того, я могу установить дополнительные параметры для bash.

Заранее спасибо!!!

22.11.2019

Ответы:


1

Основная проблема заключается в том, что < принимает имя файла для перенаправления, а не имя файла и некоторые аргументы. Смешивание этих двух вещей таким образом просто не сработает.

Если я правильно понимаю, вы хотите запустить скрипт, который существует на локальном компьютере, но выполнить его (с предоставленными аргументами) на удаленном компьютере. В этом случае то, что вы хотите запустить, выглядит примерно так:

ssh user@server 'bash -s bar baz' <"foo.sh"

Обратите внимание, что аргументы передаются в совершенно другом месте, чем имя файла сценария. Если возможно, я бы рекомендовал никогда не смешивать их; сохраните их в отдельных переменных, а затем используйте что-то вроде этого:

ssh user@server "bash -s $scriptargs" <"$scriptfile"
23.11.2019
  • Привет, stackoverflow.com/users/89817/gordon-davisson, спасибо, что заглянули сюда. Спасибо за обширное объяснение. Намерение состояло в том, чтобы запустить локальный скрипт и передать локальные параметры на удаленный сервер. Неважно, так как это невозможно в любом случае, я должен искать какой-то другой подход. 25.11.2019

  • 2

    Судя по звукам ошибки, foo.sh не существует на сервере, поэтому он не работает.

    Кажется, самое простое решение:

    ssh user@server 'foo.sh bar baz', если на сервере существует "foo.sh".

    Если «foo.sh» не существует/не может существовать на сервере, пытались ли вы использовать здесь документы? Например:

    ssh user@server "cat > foo.sh && chmod u+x foo.sh && ./foo.sh bar baz" << "EOF"
    `heredoc> #Put your contents of foo.sh here
    `heredoc> #And put them here
    `heredoc> echo "Argument 1: $1"
    `heredoc> echo "Argument 2: $2"
    `heredoc> EOF
    user@server's password:
    Argument 1: bar
    Argument 2: baz
    

    РЕДАКТИРОВАТЬ:

    david@localhost ~ % bash -s < test.sh David Finder
    Hello David
    Hello Finder
    

    Отредактируйте мой предыдущий ответ, проблема связана с цитированием входных аргументов, переданных Bash, поскольку он видит весь ввод как один файл (он ищет файл, буквально называемый «foo.sh bar baz», с пробелами внутри.

    22.11.2019
  • привет stackoverflow.com/users/11186403/david-allewell. Спасибо за ответ. Это не проблема с ssh. Вы можете попробовать это только с bash, имея foo.sh скрипт и выполняя bash -s < "foo.sh bar baz", вы получите ошибку. 22.11.2019
  • большое спасибо за твою помощь. Да, это сработает, но помните, что моя команда заключена в кавычки $COMMAND. Мне интересно, могу ли я явно отметить параметры. Что-то вроде foo.sh arg_1=bar arg_2=baz 22.11.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..