그래서 저는 UNIX 과정을 위한 프로젝트를 개발 중이며 책에 있는 지침을 단계별로 따르고 있습니다. 최근에 쉘 스크립트에서 여러 함수를 생성하는 중에 코드가 말한 대로 작동했음에도 불구하고 제대로 실행되지 않는 문제가 발생했습니다.
배경 정보: - 소스 디렉터리가 존재합니다. - corp_phones 파일이 해당 디렉터리에 존재합니다. - 함수를 사용하기 전에 로드했습니다.
이것은 내 스크립트입니다.
sort_name()
{
sort +1 -t: ~/source/corp_phones
}
sort_date()
{
sort +6 -t: ~/source/corp_phones
}
sort_dept()
{
sort +4 -t: ~/source/corp_phones
}
답변1
즉, 정렬에 사용하는 구문은 이전 버전의 POSIX에서 가져온 것입니다. ~에서coreutils 정렬 매뉴얼:
POSIX 1003.1-2001을 준수하지 않는 시스템에서 정렬은 정렬 키를 지정하기 위해 기존의 원점-0 구문 "+pos1 [-pos2]"를 지원합니다.y가 "0"이거나 존재하지 않는 경우 기존 명령 "sort +ax -by"는 "sort -k a+1.x+1,b"와 동일하고, 그렇지 않으면 "sort -k a+"와 동일합니다. 1.x" + 1,b+1.y'.
이 레거시 동작은 _POSIX2_VERSION 환경 변수를 사용하여 제어할 수 있습니다(표준 준수 참조). "-pos2"와 함께 레거시 구문을 사용하여 POSIXLY_CORRECT가 설정되지 않은 경우에도 활성화할 수 있습니다.
표준 호스트용 스크립트는 레거시 구문을 피하고 대신 -k를 사용해야 합니다.
레거시 동작을 복원하는 것이 가능하지만 최신 구문을 사용하는 것이 더 간단합니다.
이 +1
옵션은 두 번째 필드부터 행 끝까지의 정렬 키를 정의합니다. 이에 상응하는 새 옵션은 입니다 -k 2
. 따라서 사용해야 하는 새 명령 sort
은 다음과 같습니다.
sort -k 2 -t: ~/source/corp_phones
sort -k 7 -t: ~/source/corp_phones
sort -k 5 -t: ~/source/corp_phones