ls -l
사용자 정의 열을 통해 명령을 수정할 수 있는지 궁금합니다 .
예를 들어, 이 열에 $(CustomCommand FILE)
.
답변1
이것은 매우 기본적인 개념 증명입니다. 특별히 강력하지는 않지만(예: 공백이 있는 파일 이름은 깨질 수 있음) 아이디어를 얻습니다.
$ export CustomCommand=file
$ alias ls=/tmp/test/myls
$ ls
a b c myls
$ ls -l
-rw-rw-r-- 1 steve steve 0 Sep 22 19:17 a a: empty
-rw-rw-r-- 1 steve steve 0 Sep 22 19:17 b b: empty
-rw-rw-r-- 1 steve steve 0 Sep 22 19:17 c c: empty
-rwxr-xr-x 1 steve steve 127 Sep 22 19:18 myls myls: POSIX shell script, ASCII text executable
$ cat /tmp/test/myls
#!/bin/sh
if [ "$1" = "-l" ]
then
shift
ls -l $* | awk 'NF>2{ printf "%s ",$0 ; system("$CustomCommand " $NF) }'
else
ls $*
fi
$
답변2
Paste, sed, ls를 합쳐서 bashrc에 저장하는 방법입니다. 여기에는 두 가지 주요 부분이 있습니다.
- 여기서 "custom_command"는 매개변수를 허용하지만 전달된 각 매개변수에 "YYY"를 추가하고 "ZZZ"를 추가합니다. OP의 실제 CustomCommand는 물론 다른 작업을 수행합니다.
- custom_command에 대한 호출을 포함하는 "ls1"이라는 별칭. 우리는 여전히 "ls"에 의존하므로 "ls"와의 충돌을 피하기 위해 이름을 "ls1"로 지정합니다.
따라서 ~/.bashrc에 다음을 추가하세요.
custom_command ()
{
for i; do
echo "YYY${i}ZZZ"
done
}
alias ls1='paste <( ls -lh | sed 1d ) <( custom_command * )'
그런 다음 . ~/.bashrc
현재 터미널에 적용되도록 합니다.
현재 디렉터리에 'dir1' 'file1' 'file2' 및 'file 3'(공백이 있는 파일 테스트)이 포함되어 있으면 별칭을 실행 ls1
하고 다음을 확인할 수 있습니다.
$ ls1
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1 YYYdir1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1 YYYfile1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2 YYYfile2ZZZ
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3 YYYfile 3ZZZ
설명하다
custom_command ()
{
for i; do
echo "YYY${i}ZZZ"
done
}
- 더 이상 아무것도 지정 하지 않으면
for i
for 루프가 위치 인수를 사용하게 됩니다. - i 변수를 구별하려면 중괄호가 필요합니다. 그렇지 않으면 bash는 $iZZZ를 변수로 잘못 해석합니다.
출력 예:
$ custom_command a b c
YYYaZZZ
YYYbZZZ
YYYcZZZ
*
Bash 확장과 함께 사용하는 경우:
$ custom_command *
YYYdir1ZZZ
YYYfile1ZZZ
YYYfile2ZZZ
YYYfile 3ZZZ
"ls -lh"는 일반적으로 다음을 수행합니다.
$ ls -lh
total 16K
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3
sed를 사용하세요. 1은 라인 1을 의미하고, d는 삭제를 의미하며 첫 번째 라인을 삭제합니다.
$ ls -lh | sed 1d
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3
절차적 paste
및 프로세스 대체는 <(...)
이러한 별도의 출력을 결합하는 데 핵심입니다. Paste에는 일반적으로 파일이 인수로 필요합니다 paste data1 data2
. 예를 들어 bash의 프로세스 대체를 사용하므로 명령의 출력은 사용할 수 있는 일반 파일로 표시됩니다.
$ paste <( ls -lh | sed 1d ) <( custom_command * )
drwxr-xr-x 2 meme meme 4.0K Sep 22 14:33 dir1 YYYdir1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file1 YYYfile1ZZZ
-rw-r--r-- 1 meme meme 8 Sep 22 13:51 file2 YYYfile2ZZZ
-rw-r--r-- 1 meme meme 14 Sep 22 15:45 file 3 YYYfile 3ZZZ
bashrc를 사용하여 이 명령을 저장하면 . ~/.bashrc
새 터미널이나 reload bash를 실행하는 기존 터미널에서 쉽게 재사용할 수 있습니다.