我正在嘗試使用 shell_exec 函式運行 cat 命令,更準確地說是這樣的:
cat <(echo "foo") bar.xml > foo-bar.xml
但我收到如下語法錯誤:
sh: 1: Syntax error: "(" unexpected
我完全迷失了,因為這在本地作業正常并且在服務器中手動執行命令時,但是在運行 php 腳本時它回傳語法錯誤。有什么線索嗎?
正在使用的原始代碼:
$shell_cmd = "cat <(echo \"{$this->xmlHeader}\") ";
$shell_cmd .= '\'' . $path . $filename . '\'' . " ";
$shell_cmd .= " > " . '\'' . $path . "hfb/" . strtolower(str_replace($this->replace_values, '', $hfbName)) . ".xml" . '\'';
shell_exec($shell_cmd);
uj5u.com熱心網友回復:
這里的問題很可能是使用了哪個shell。它并沒有真正記錄在案,但我相信shell_exec會使用/bin/sh它,它通常是一個最小的符合 Posix 的 shell(或者一個更復雜的 shell 來模擬這種合規性)。這非常有用,因為這意味著系統腳本將始終以相同的方式作業,而不管為特定用戶安裝或配置了哪些其他 shell。
但是,當您直接登錄時,您可能正在使用 bash,它具有額外的功能,例如<(...)從命令中獲取命名檔案描述符的語法。
在這種情況下,最好的方法是讓您的命令僅使用標準化設施,這些設施將在/bin/sh.
特別是,您用于將文本字串和檔案cat粘合在一起:echo
cat <(echo "foo") bar.xml
這可以通過首先回顯字串,然后輸出檔案來表示:
echo "foo"; cat bar.xml
要將兩者收集到一個輸出中,請將它們放在大括號中:
{ echo "foo"; cat bar.xml; } > foo-bar.xml
或者,您可以提供cat一個引數,-將標準輸入與一個或多個其他檔案連接起來,這樣您就可以將 echo 中的值通過管道傳輸到其中:
echo "foo" | cat - bar.xml > foo-bar.xml
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/489843.html
