나는 cshell에서 다음 별칭을 시도하고 있습니다.
alias sll 'ls -l \!* | grep -oE '[^ ]+$' | paste -s | xargs ls -l'
이 CSH 표현에 대한 변수 이름이 잘못되었습니다.
을 사용하면 \$
별칭이 오류 없이 설정됩니다. 하지만 이 별칭을 사용하면 다음과 같은 결과를 얻게 됩니다.grep: Invalid regular expression
첨부된:
- 이 별칭의 목적은
ls -Ll <filenames>
파일의 전체 경로를 통해 기호 링크 참조를 활성화하는 것입니다. - 별칭의 RHS 부분은 독립 실행형 명령으로 잘 작동합니다.
- 대신 egrep (grep -E) 을 시도했습니다
awk '{print $NF}'
. 그럼에도 불구하고 CSH는 오류: NF 정의되지 않은 변수를 제공합니다.
답변1
작은따옴표를 확인하세요. 작은따옴표는 마술처럼 중첩되지 않습니다.
alias sll 'ls -l \!* | grep -oE '\''[^ ]+$'\'' | xargs ls -ld --'
이는 다음과 같은 여러 가지 이유로 여전히 결함이 있습니다.
- 이후
[^ ]
공백이 포함된 파일 또는 링크 대상 이름에는 작동하지 않습니다. - 목록을 행 목록으로 처리하면 개행 문자가 포함된 파일/링크 대상 이름에 대해서는 작동하지 않습니다.
- 때문에
xargs
아포스트로피, 백슬래시, 큰따옴표 및 기타 유형의 공백이 포함된 파일/대상 이름에는 작동하지 않습니다. - 심볼릭 링크의 경우비교적경로를 대상으로 지정하면 현재 디렉터리의 심볼릭 링크에 대해서만 작동합니다. 두 번째 디렉터리에 전달하는 내용은 현재 디렉터리에 대한 상대 경로이고 심볼릭 링크는 심볼릭 링크 파일의 경로를 기준으로 확인되기 때문입니다 ( 링크
ls
가 있는 경우).a/b/c -> d
, 즉 현재 디렉터리a/b/d
가 아닌 ).d
- 출력의 첫 번째 줄로 인해
total <n>
잘못된 오류 메시지가 표시됩니다ls
. - 심볼릭 링크에 대한 심볼릭 링크의 경우 동일한 결과를 제공하지 않습니다
ls -lL
(아마도 이것이 원하는 것일 수도 있음).
이를 통해 zsh
다음을 수행할 수 있습니다.
ls -ld -- *(:A)
수정자는 :A
기호 링크를 표준 절대 경로로 확장합니다.
GNU 시스템과 준동등함:
readlink -fz -- * | xargs -r0 ls -ld --