我在 hdfs 上有一個 shell 腳本,它接受 8-9 個引數。通常,我可以按如下方式執行:
sh sample.sh -mode FULL -status DELETE -id 1456 -region AP -path </path/to/filepath>
我試過hadoop fs -cat /dev/test/sample.sh | exec bash -mode FULL -status DELETE -id 1456 -region AP -path /dev/resultsFolder
即使我傳遞了這些引數,它們也不會被讀取,并且腳本在沒有引數的情況下執行。拋出錯誤作為No such file or directory處理此問題的最佳方法是 什么?
uj5u.com熱心網友回復:
bash -c "$(hadoop fs -cat /dev/test/sample.sh)" bash -mode FULL -status DELETE -id 1456 -region AP -path /dev/resultsFolder
也可以。
-c如果存在 -c 選項,則從第一個非選項引數command_string中讀取命令。如果command_string之后有引數 ,則將第一個引數$0分配給位置引數,并將任何剩余的引數分配給位置引數。賦值$0設定 shell 的名稱,用于警告和錯誤訊息。
也許更易讀(雖然bash -s相當優雅)
code=$(hadoop fs -cat /dev/test/sample.sh)
bash -c "$code" bash -mode FULL -status DELETE -id 1456 -region AP -path /dev/resultsFolder
uj5u.com熱心網友回復:
bash -mode FULL將-modeandFULL引數傳遞給 bash,而不是你的腳本。在 bash 手冊頁中,描述了選項:
-- A-- 表示選項結束并禁用進一步的選項處理。-- 之后的任何引數都被視為檔案名和引數。- 的引數等價于 --。
和:
-s如果存在 -s 選項,或者在選項處理后沒有保留任何引數,則從標準輸入讀取命令。此選項允許在呼叫互動式 shell 時設定位置引數。
因此,我將其呼叫為
.... | bash - --mode FULL ....
根據 Gordon Davisson 給出的評論,我們需要在-s這里使用:
.... | bash -s -- -mode FULL ....
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/408266.html
標籤:
