2
在命令行上,如果用完問題的的Node.js和child_process.exec參數
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運行我的代碼時(通過jashkenas的CoffeeScript包),我沒有遇到這個問題。起初我認爲這是一個路徑問題,但它不是(使兩個環境中的PATH
完全沒有影響)。也許這是因爲一個環境是TTY,而另一個則不是。
其他人是否意識到這種不一致?這是一個節點錯誤,還是我忽略了一些東西?我猜測如果我使用底層spawn
而不是exec
,我的問題就會消失。
嗯,'/ bin/echo -n「foo」'似乎可以像預期的那樣工作在shell上,所以我仍然認爲根本原因是Node的'exec'問題。感謝'printf'指針,雖然 - 我能夠解決它的問題。 – 2011-03-19 13:58:48
Trevor Burnham,如果你找出問題的根源,我真的很想知道爲什麼你的初始代碼沒有按預期工作。但是我很高興你找到了解決這個問題的解決方法。 – sarnold 2011-03-20 23:57:24
我只是碰到了這個。難道是Node使用/ bin/sh而不是/ bin/bash?從echo的手冊頁:「最值得注意的是,sh(1)中的內置回顯不接受-n選項。」在我的情況下,我用'echo foo |模擬'echo -n' tr -d'\ n''。 – davidchambers 2013-02-24 20:31:22