저는 GNU bash 버전 4.3.48(1)-릴리스(x86_64-pc-linux-gnu)와 함께 Linux Mint 18.2를 사용하고 있습니다.
100GB 이상의 파일에 자주 사용하기 때문에 진행 상황을 표시하기 위해 정의한 함수로 sha256sum
재정의 하고 싶습니다 ..bash_aliases
기능은 다음과 같습니다:
function sha256sum {
if [ -z "$1" ]
then
{
\sha256sum --help
}
else
{
pv $1 | \sha256sum -b
}
fi
}
하지만 설명할 수 없는 범인이 몇 명 있습니다.
우선, 예기치 않게 동작하여 매개변수를 "먹도록" 강제했습니다.
구체적으로 다음 파일은 다음과 같습니다.
-rw-r--r-- 1 root root 2.0K Jul 24 12:29 testdisk.log
이제 끝나지 않는 파일 크기를 출력합니다.
vlastimil@vb-nb-mint ~ $ sha256sum testdisk.log
1.92KiB 0:00:00 [40.8MiB/s] [====================================================>] 100%
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
...
...
...
^C
[1]+ Stopped pv $1 | \sha256sum -b
내가 뭘 잘못했나요? 중괄호 유무, 세미콜론 유무 등 다양한 구조를 시도했지만 한 시간 동안 이보다 더 좋은 결과를 얻지 못했습니다.
편집 1:
\
다음과 같이 함수 기호를 제거합니다 .
function sha256sum {
if [ -z "$1" ]
then
{
sha256sum --help
}
else
{
pv "$1" | sha256sum -b
}
fi
}
결과 :
1.92KiB 0:00:00 [56.8MiB/s] [====================================================>] 100%
1.92KiB
1.92KiB
1.92KiB
1.92KiB
...
...
...
^C
[2]+ Stopped pv "$1" | sha256sum -b
답변1
\sha256sum
함수 본문의 각 항목은 함수에 대한 재귀 호출입니다. 이름 앞에 백슬래시를 붙이면 별칭으로 해석되지 않지만 함수로 해석되는 것은 방지되지 않습니다.
예를 들어 원래 함수의 레이아웃을 유지하면서 command sha256sum
다음과 같이 작성하고 싶습니다 .\sha256sum
function sha256sum {
if [ -z "$1" ]
then
{
command sha256sum --help
}
else
{
pv "$1" | command sha256sum -b
}
fi
}
답변2
~처럼다그가 지적했다, 함수를 재귀적으로 호출하고 있습니다.
그는 백슬래시를 제거하고 command
대신 백슬래시를 사용하라고 올바르게 조언했습니다.
또한 중괄호는 필수는 아니지만 허용됩니다.
내 기능은 다음과 같습니다.
sha256sum () {
if [ -n "$1" ]; then
pv "$1" | command sha256sum -
else
command sha256sum --help
fi
}
이 셸 기능의 단점은 명령줄 플래그를 sha256sum
또는 여러 입력 파일에 전달할 수 없다는 것입니다.