Проблема с аргументами Node.js и child_process.exec - PullRequest
2 голосов
/ 19 марта 2011

В командной строке, если я запускаю

echo -n "foo" | openssl aes-128-cbc -k "key" -base64 -e

(флаг -n не позволяет echo добавить новую строку в конец его вывода), я получаю

U2FsdGVkX1+nMW5I4eZSasPKfsUuCpbFsnn56ngEdec=

Но когда я запускаю

exec = require('child_process').exec;
exec('echo -n "foo" | openssl aes-128-cbc -k "key" -base64 -e', callback);

, обратный вызов получает вывод

U2FsdGVkX1/CARBiGos0x9ALNhFqcIaFvZ9EUvVBxuc=

Почему это отличается?Расшифруйте его, и вы получите строку

-n foo

Так или иначе, exec закодировал -n "foo" в "-n foo" (под узлом 0.4.2).

Вот самый странныйчасть: я не вижу этой проблемы, когда я запускаю свой код непосредственно из TextMate (через комплект CoffeeScript от jashkenas).Сначала я думал, что это проблема пути, но это не так (создание PATH идентичных в двух средах не дало эффекта).Возможно, это потому, что одна среда - TTY, а другая - нет.

Знают ли другие люди об этом несоответствии?Это ошибка узла или я что-то игнорирую?Я предполагаю, что мои проблемы исчезнут, если я использую нижний уровень spawn вместо exec.

1 Ответ

3 голосов
/ 19 марта 2011

Возможно, ваш /bin/echo не уважает -n? echo часто является встроенной оболочкой, и это можно уважать -n. Вы можете использовать printf(1) вместо этого, он более переносим.

...