Shell-Script
ls -td 無法辨識任何目錄
我在處理 shell 腳本時遇到了一些問題。腳本中的一個命令用於將一組命令從 Jenkins 主機推送到 MySQL 數據庫主機,以“本地”執行 MySQL 數據庫的備份。
導出變數供以後使用時會出現問題。匿名範例:
ssh -q -o Batchmode=yes mysql@${host} \ "export variable=$(ls -td ${backup_path}/FULL/*/ | head -1); \ echo $variable"
的目標
ls -td
是拉取子目錄中最新寫入的目錄${backup_path}/FULL
。執行此特定命令時出現的錯誤是
ls: cannot access ${backup_path}/FULL/*/: No such file or directory
的迴聲
$incr_basedir
也返回空輸出。我已經嘗試過檢查 ${backup_path}/FULL 中是否存在子目錄和驗證權限,這是輸出:
-bash-4.2$ pwd ${backup_path}/FULL -bash-4.2$ ls -l total 498 drwxr-x---. 28 mysql mysql 2019 May 3 16:53 2017-05-03_16-47-37
我應該如何繼續接近我的目標?
正如 Eric 之前提到的,這些問題是由范圍界定引起的。
我通過未列出的複合 ssh 指令發送和推送了許多局部變數,這需要使用雙引號。因為我希望 ls -td 遠端執行,所以我專門製作了一個全新的 ssh 命令來設置這個變數。設置變數後,我像其他任何人一樣輸入它。
export variable="$(ssh -q -o Batchmode=yes mysql@$host 'ls -td ${backup_dir}/FULL/*/ | head -1')"
錯誤不再存在。實際上,我的問題是確定本地主機與遠端主機的目錄結構不同的範圍。