我有這個命令遞歸查找包含mustExist.js
目錄,但不cannotExist.js
:如何正確使用`sh -c`執行帶有列表的命令?
comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \; | sort -u)
它工作正常。
現在,我必須將它作爲字符串傳遞給node.js
自動化腳本。腳本拾取字符串並將其作爲sh -c <string>
運行。我無法改變那部分。
所以我通過這個字符串:
'comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \\; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \\; | sort -u)'
但是,我總是會遇到這樣的錯誤:當我通過這個字符串
Warning: Command failed: /bin/sh -c comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \; | sort -u)
/bin/sh: 1: Syntax error: "(" unexpected
:
'"comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \\; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \\; | sort -u)"'
我得到:
Warning: Command failed: /bin/sh -c "comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \; | sort -u)"
/bin/sh: 1: comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \; | sort -u): not found
當我嘗試手動使用sh
到immitate自動化腳本:
sh -c comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \; | sort -u)
我得到一個不同的錯誤:
comm: missing operand
或用引號:
sh -c "comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \; | sort -u)"
我得到:
/bin/sh: 1: Syntax error: "(" unexpected
其他報價:
sh -c 'comm -13 <(find . -type f -name cannotExist.js -exec dirname {} \; | sort -u) <(find . -type f -name mustExist.js -exec dirname {} \; | sort -u)'
/bin/sh: 1: Syntax error: "(" unexpected
是否有可能做到這一點不知?
「如果使用名稱sh調用bash,它會盡可能地模仿歷史版本sh的啓動行爲」(來源:man bash)。 sh並沒有很多bash的特性,我認爲命令結果擴展就是其中之一。可能的解決方法:把你的命令放在一個文件中,比如說my_find.sh,然後用'sh -c「bash -c my_find.sh」' –
運行它謝謝@marekjancuska你一定是對的。該列表格式在'sh'中無效。 – Redsandro