Shell-Script

ls -td 無法辨識任何目錄

  • May 8, 2017

我在處理 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')"

錯誤不再存在。實際上,我的問題是確定本地主機與遠端主機的目錄結構不同的範圍。

引用自:https://unix.stackexchange.com/questions/363717