Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Разница между выполнением сценария оболочки напрямую и через канал

Автор вопроса: nail feiОтветов: 1

мой сценарий оболочки с именем mongoLogin.sh, как показано ниже:

#!/bin/sh
mongo
use demo
show tables

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

sh mongoLogin.sh

оно работает. однако, если я выполню его таким образом, как показано ниже:

cat mongoLogin.sh | sh

по сравнению с прямым выполнением, он завершится автоматически, как и я ctrl+c после его прямого выполнения. Казалось, что команда sh после канала создаст новый подпроцесс, и этот подпроцесс завершится по какой-то причине.
Существует ли какой-нибудь метод, с помощью которого я могу добиться того же результата, выполнив скрипт через канал?

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

вывод выполнения через канал, как показано ниже:

xxx@xxxMacBook-Pro:~/Downloads$cat mongoLogin.sh | sh
MongoDB shell version v4.0.3
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("43c55950-f9e2-49ca-a458-
611f8c71eae4") }
MongoDB server version: 4.0.3
switched to db demo
test
bye

shell

Ответы

Ответ 1 · user1934428

Оба варианта не работают, потому что use demo не является допустимой командой оболочки.

Я не работал с монго, но если команда принимает ввод со стандартного ввода, вы можете попробовать

mongo <<OGNOM
use demo
show tables
OGNOM

Убедитесь, что итоговый ОГНОМ начинается в первой колонке вашей строки!

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы