我有一個批處理腳本,我想用它在特定級別的所有目錄上運行。它呼叫一個腳本(recon1.sh),該腳本將目錄名稱作為引數并將結果檔案夾存盤在每個子目錄中。我想要的是,當從命令列(bash batch_recon1.sh path_X)指定path_name 時,它將cd到每個蛋白質檔案夾(protein_A,protein_B, ....protein_Z)并執行 recon1.sh 并對下的所有蛋白質執行此操作路徑檔案夾。目前,它在一種蛋白質(蛋白質_ A)沒有開始用于蛋白質_ B 后結束和別的。我怎樣才能解決這個問題?我嘗試過使用更簡單的腳本,它只回圈一級深的子檔案夾并將該目錄中的 file_names 寫入文本檔案,這作業得很好,但由于某種原因,這段代碼(batch_recon1.sh for recon1.sh)不起作用. 有人可以幫忙嗎?
檔案夾結構:
[軟體檔案夾]
${HOME}/ProjName/software/batch_recon1.sh
${HOME}/ProjName/software/recon1.sh
[專案檔案夾]
${HOME}/ProjName/pathways/Pathway_X/protein_A/
${HOME}/ProjName/pathways/Pathway_X/protein_A/protein_A_id
${HOME}/ProjName/pathways/Pathway_X/protein_A/protein_A_searchRes
${HOME}/ProjName/pathways/Pathway_X/protein_A/protein_A_alignment
${HOME}/ProjName/pathways/Pathway_X/protein_B/
${HOME}/ProjName/pathways/Pathway_X/protein_B/protein_B_id
${HOME}/ProjName/pathways/Pathway_X/protein_B/protein_B_searchRes
${HOME}/ProjName/pathways/Pathway_X/protein_B/protein_B_alignment
recon1.sh 將 protein_name 作為引數(例如 recon1.sh protein_A)
所以 ${dirname} 應該是(即)“protein_A”而不是蛋白質檔案夾的完整路徑。
用作(從命令列)bash batch_recon1.sh Pathway_X
batch_recon1.sh 的代碼:
#!/bin/bash
# -*- coding: utf-8 -*-
set -e
current_path=$(pwd)
pathway_name=$1
path_to_folder=${HOME}/ProjName/pathways/${pathway_name}
path_to_software_folder=${HOME}/ProjName/software
cd ${path_to_folder}
echo '----running batch_reconcile1.sh on pathway:'$@
for fol in "${path_to_folder}"/*/; do
[ -d "${fol}" ] || continue ## if not a directory skip
dirname="$(basename "${fol}")"
(cd "${fol}" && bash ${path_to_software_folder}/recon1.sh ${dirname} )
cd ..
done
uj5u.com熱心網友回復:
該腳本可能因為recon1.sh失敗而提前退出,而您有set -e(如果命令失敗則退出)。
它可能失敗了,因為cd ..它不應該在那里。
這可能是也可以更好地保持試圖recon1.sh對所有的蛋白質,即使一個失敗(這是由你)。
代替
(cd "${fol}" && bash ${path_to_software_folder}/recon1.sh ${dirname} )
cd ..
和:
cd "${fol}" || continue
bash ${path_to_software_folder}/recon1.sh "${dirname}" || echo "recon1.sh failed for ${dirname}" >&2
作業目錄設定正確。如果recon1.sh由于任何原因仍然失敗,則會列印錯誤,但腳本不會退出,并嘗試下一個蛋白質。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/358766.html
