У меня есть эта рабочая команда в терминале (имея в виду, что ssh to localhost предназначен для тестирования - не имеет значения, удаленный сервер или нет):

> ssh nick@127.0.0.1 sh -s -- < "./a.sh" < "./b.sh"

a.sh:

export var="hey world"

b.sh:

echo "$var"

печатает "эй мир", как и ожидалось.

Но когда я добавляю ту же команду в файл скрипта как таковой (скажем, он называется run.sh):

#!/bin/sh

# ...
ssh nick@127.0.0.1 sh -s -- < "./a.sh" < "./b.sh"

и я выполняю следующим образом:

chmod +x ./run.sh
./run.sh

это не работает - пустая строка печатается. Я проверил другие команды, и они, похоже, не были прочитаны.

В чем дело?


РЕДАКТИРОВАТЬ: я только что разъяснил, я решил проблему сам по себе с тем же ответом пришел Cornholio, но я хочу точно знать, что заставляет его работать через REPL против в файле сценария оболочки

1 ответ1

1

Вы, вероятно, используете оболочку, отличную от /bin/sh для теста командной строки. Ваша проблема - поддержка перенаправления в /bin/sh . Я не нашел способа добавить содержимое двух файлов в stdin . Чтобы увидеть, что происходит, вы можете заменить команду ssh на cat:

> cat < "./a.sh" < "./b.sh"
echo "$var"

> cat < "./a.sh" 
export var="hey world"

> cat < "./b.sh" 
echo "$var"

Как насчет cat a.sh b.sh ... | ssh nick@127.0.0.1?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .