2016-06-02 7 views
0

bash의 1, 2, 3 등의 파일에 여러 디스크립터를 생성하려고합니다.
예를 들어, exec 9>abc/1은 정상적으로 작동하지만 for 루프에서 설명자를 만들려고하면 exec $[$i+8]>abc/$i과 같이 작동하지 않습니다. 여러 가지 방법을 시도했지만 exec 변수를 허용하지 않는 것으로 보입니다. 내가 원하는 것을 할 수있는 방법이 있습니까?bash : 루프에서 많은 디스크립터 생성하기

편집 : 그렇지 않은 경우 설명자없이 flock을 사용하는 방법이 있을까요?

+0

또 다른 메모에서'$ [expression]'은 더 이상 사용되지 않는 구문입니다. '$ ((expression))'로 이동하십시오 – anishsane

+1

''eval "exec $ ((i + 8))> abc/$ i"'시도해보십시오. – anishsane

답변

0

예, exec은 파일 설명자 번호에 대한 변수를 허용하지 않습니다. 의견에서 지적한 바와 같이, 당신은 $i1 경우,

exec 9>"abc/$i" 

에 해당,

eval "exec $((i + 8))>"'"abc/$i"' 

는 그 복잡한 따옴표가 평가 에드을 확인하고 명령도 안전합니다 - 에드 간부 인 사용할 수 있습니다 파일 이름이 abc/1과 다른 것으로 변경된 경우

그러나there is 경고 : 그들은 파일과 충돌 할 수 있으므로 파일을 사용하는 것이보다 9 디스크립터

리디렉션은주의해서 사용해야은 쉘이 내부적으로 사용 디스크립터.

당신의 작업은 연속적인 파일 기술자 번호를 필요로하지 않는 경우에 따라서, 당신은 자동으로 할당 사용할 수 있습니다 설명 : 파일 기술자 번호 앞에 할 수있다

각 리디렉션 대신 단어 앞에 할 수있다 형식은 {varname}입니다. 이 경우 >&-<&-을 제외한 각 재 지정 연산자에 대해 쉘은 10보다 큰 파일 설명자를 할당하고 varname에 할당합니다.

그래서,

exec {fd}>"abc/$i" 
echo "$fd" 

abc/1 및 인쇄 파일 기술자 번호 (예를 들어, 10)에 기록 파일 기술자 10 (또는 그 이상)를 엽니 다.