Проблемы с передачей аргументов в скрипт Node.js - PullRequest
0 голосов
/ 19 октября 2019

Мой сценарий Node.js работает по-разному в командной строке и внутри сценария bash. Все работает нормально через командную строку, но второй аргумент не распознается при запуске из скрипта bash.

Нужно ли по-другому передавать аргументы внутри скрипта bash?

сервер.js предоставляется два аргумента:
1. Команда (в этом случае, обновить таблицу через mySQL)
2. Таблица (желаемая таблица для обновления с помощью данных, извлеченных из API)

Командная строка /Запись скрипта:

node server.js -update-table table1

server.js:

var args          = process.argv.slice(2);
var command       = args[0];

switch (command) {
  case '-update-table':
    var tableName = args[1];
    switch (tableName) {
      case 'table1':
           tableUpdateFunction.table1();
           break;

      case 'table2':
           tableUpdateFunction.table2();
           break;

      default:
           console.log('ERROR: Unknown Table Name ' + tableName)
           break;
    }
    break;
}

Консоль при запуске из скрипта (триггеры по умолчанию):

ERROR: Unknown Table Name table1

1 Ответ

0 голосов
/ 19 октября 2019

Я думаю, что вы столкнулись с проблемой окончания строки в Windows. Если вы подготовили файл сценария с помощью какой-либо утилиты Windows, а затем вызвали его в Unix-подобной среде, тот факт, что командная строка заканчивается последовательностью CR-LF (Windows), вызовет проблемы с оболочкой, скомпилированной для использования всреда unix, потому что CR будет рассматриваться как обычный символ.

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

console.log('ERROR: Unknown Table Name "' + tableName + "'")

, то вы можете увидеть это:

"RROR: Unknown Table Name "table1

Обратите внимание, что E в ERROR было перезаписано с помощьюдвойная кавычка;это потому, что CR в конце table1 заставляет курсор вернуться к левому полю, прежде чем будет напечатано следующее ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...