我正在使用 Ubuntu 並且正在嘗試安裝這透過 Anaconda 的 Python 套件。我按照連結中的步驟進行操作,當我輸入cp -Ri $THIS_DIR/PackageFiles/Scripts $CMDIR
(第 59 行以後)時,我得到:
cp: invalid option -- 'h'
原因是什麼?
echo $THIS_DIR
編輯:和的輸出分別echo $CMDIR
是dirname -bash
和/home/myusername/cellmodeller
。
答案1
有幾件事: if THIS_DIR
contains dirname -bash
,cp -Ri $THIS_DIR/...
擴展為等價的cp -Ri dirname -bash/...
(因為分詞),即cp
獲取dirname
和-bash/...
作為不同的參數。第二個以破折號開頭,因此它嘗試將其中的字母解釋為選項。 GNU cp 沒有-h
作為選項,因此它會給出錯誤。
您可以防止用引號進行拆分,但這並沒有多大意義,因為您可能沒有用dirname -bash
空格和所有內容呼叫的目錄。
查看腳本,THIS_DIR
是透過設定的
THIS_DIR="`dirname $0`"
注意反引號,它們啟動命令替換,運行dirname
命令。如果刪除它們,dirname ...
則會指派一個文字字串。
再說一遍,$0
是正在運行的 shell 或腳本的名稱。該腳本可能使用該命令來查找腳本本身所在的位置,例如/foo/bar
運行時的路徑/foo/bar/scriptname.sh
。但在通常啟動的交互式 shell 中$0
可能只包含bash
, 或者-bash
如果它是登入 shell。
正如 cutrightjm 在評論中所說,該腳本旨在作為腳本運行,而不是作為單獨複製到終端的命令。 (它仍然可以在擴展周圍使用引號。)
THIS_DIR
當然,您可以在腳本中更改分配,或在運行之前對其進行修改。