간단한 스크립트가 있다고 가정합니다.zsh 대 forbash 루프의 차이점은 무엇입니까?
for file in `hadoop classpath | tr ':' ' ' | sort | uniq`; do echo $file; done
및 hadoop classpath
의 원래 출력 (항아리를 찾는 폴더의 목록) 다음과 같습니다 : 나는 Bourne 쉘 위의 스크립트를 실행하는 경우
zsh %> hadoop classpath
/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/contrib/capacity-scheduler/*.jar
하는 결과가 될 것입니다 (지정된 클래스 경로에 포함 된 모든 항아리의 고유 한 목록을 줄 것이다)이 같은 : zsh을에서
bash-4.1$ for file in `hadoop classpath | tr ':' ' ' | sort | uniq`; do echo $file; done
/usr/local/hadoop/etc/hadoop
/usr/local/hadoop/share/hadoop/common/lib/activation-1.1.jar
/usr/local/hadoop/share/hadoop/common/lib/asm-3.2.jar
/usr/local/hadoop/share/hadoop/common/lib/avro-1.7.4.jar
/usr/local/hadoop/share/hadoop/common/lib/commons-beanutils-1.7.0.jar
/usr/local/hadoop/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar
/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar
/usr/local/hadoop/share/hadoop/common/lib/commons-codec-1.4.jar
...
을하지만, 난 아직도 얻을 :
,369을zsh %> for file in `hadoop classpath | tr ':' ' ' | sort | uniq`; do echo $file; done
/usr/local/hadoop/etc/hadoop
/usr/local/hadoop/share/hadoop/common/lib/*
/usr/local/hadoop/share/hadoop/common/*
/usr/local/hadoop/share/hadoop/hdfs
/usr/local/hadoop/share/hadoop/hdfs/lib/*
/usr/local/hadoop/share/hadoop/hdfs/*
/usr/local/hadoop/share/hadoop/yarn/lib/*
/usr/local/hadoop/share/hadoop/yarn/*
/usr/local/hadoop/share/hadoop/mapreduce/lib/*
/usr/local/hadoop/share/hadoop/mapreduce/*
/usr/local/hadoop/contrib/capacity-scheduler/*.jar
(즉, 클래스 패스의 폴더보다 더 많은 것).
호기심 때문에 디렉토리 목록을 zsh의 파일 정렬 목록으로 변환하는 방법은 무엇입니까?
해당 시스템은 Red Hat Enterprise Linux 서버 버전 6.5입니다.
일반적으로 for 루프를 사용하면 bash에서이 방법을 사용할 수 없습니다 (비록 문자열 분할과 glob 확장을 명시 적으로 원하기 때문에 유스 케이스가 예외 일 수 있음). http://mywiki.wooledge.org/DontReadLinesWithFor –
을 보아라. 전체'| 정렬 | uniq'는'sort'가 줄을 정렬했기 때문에 쓸모가 없지만'tr' 출력은 여전히 하나의 줄에 있습니다. 'hadoop classpath' 출력을 정렬하고 싶다면 파이프 라인은'hadoop classpath | tr ':' '\ n'| 정렬 | uniq' –