내 파일에 특정 작업을 수행하는 스크립트가 있습니다. $dir 변수를 스크립트에서 사용할 때 올바른 문자가 무엇인지 모르기 때문에 변수에 문제가 있을 수 있습니다.
for dir in *; do
cd $dir; flapwater -lp ../../ligands/"$dir.mol2" ../A2a1071_PEP_REC.pdb "A2a1071_$dirDock_Complex.pdb";
flapwater -w-auto -i "A2a1071_"$dirDock_Complex.pdb" -o "WF_$dir.pdb" -gl ../../ligands/"$dir.mol2" -gr 6 > WF.log;
cd .. ;
done
예:
변수가 $dir = 4a인 경우 스크립트는 다음과 같아야 합니다.
for dir in *; do
cd $dir; flapwater -lp ../../ligands/4a.mol2 ../A2a1071_PEP_REC.pdb A2a1071_4aDock_Complex.pdb;
flapwater -w-auto -i A2a1071_4aDock_Complex.pdb -o WF_4a.pdb -gl ../../ligands/4a.mol2 -gr 6 > WF.log;
cd .. ;
done
누군가 $dir의 쓰기 사용법을 설명할 수 있나요?
답변1
$dirDock_Complex
Bash는 변수 이름인지 변수 이름의 일부인지 알 수 없습니다 . 따라서 항상 가능한 가장 긴 이름을 사용합니다. 변수 이름을 구분하려면 중괄호를 사용하세요.
cd
또한 디렉터리 이름에 공백이 포함된 경우에도 변수를 큰따옴표로 묶을 수 있습니다.
for dir in * ; do
cd -- "$dir" || continue # Double quotes.
flapwater -lp ../../ligands/"$dir.mol2" ../A2a1071_PEP_REC.pdb "A2a1071_${dir}Dock_Complex.pdb" # Curlies.
flapwater -w-auto -i "A2a1071_${dir}Dock_Complex.pdb" -o "WF_$dir.pdb" -gl "../../ligands/$dir.mol2" -gr 6 > WF.log # curlies
cd .. || break
done