이것이 심볼릭 링크에 /proc/ 디렉토리가 있는지 테스트하는 올바른 방법입니까?

이것이 심볼릭 링크에 /proc/ 디렉토리가 있는지 테스트하는 올바른 방법입니까?

/etc/mtab 심볼릭 링크가 가리키는 지 테스트해야 합니다 . POSIX 표준을 준수해야 합니다. (일반적으로 RHEL 5에서 RHEL 7까지 실행해야 합니다.) 현재 내가 가지고 있는 것은 다음과 같습니다./proc/something

#!/bin/bash
if [ $(readlink -f /etc/mtab | grep '\/proc\/') ]; then
    echo do something related to proc
else
    echo do something other than proc
fi

일부 극단적인 경우를 놓쳤나요?

답변1

  1. 심볼릭 링크 라면 /etc/mtab어떨까요 /home/mikasa/proc/something? 아마도 ^grep 정규 표현식에 a를 추가해야 할 것입니다.
  2. 말하자면, /정규 표현식에는 특수 문자가 없으므로 이스케이프할 필요가 없습니다.
  3. 그렇게 하지 않을 타당한 이유가 없고 자신이 무엇을 하고 있는지 확실히 알고 있지 않는 한 쉘 변수 참조를 인용해야 합니다. 여기에는 $(…)명령 대체가 포함됩니다. /etc/mtab 심볼릭 링크가 있고 /proc/foo = bar명령이 다음으로 확장되는 매우 심각한 상황의 경우
    if [ /proc/foo = 열 ]
    물론 거짓으로 평가됩니다. 큰따옴표 로 묶어서 $(…)이 문제를 해결할 수 있습니다.
    만약에 ["$(readlink -f /etc/mtab | grep '^/proc/')"];그 다음에
  4. test그러나 명령 대체 또는 (일명 [... ) 을 수행할 필요는 없습니다 ]grep찾으라고 지시한 패턴을 찾았는지 여부를 나타내는 종료 상태를 제공하므로 다음과 같이 명령을 단순화할 수 있어야 합니다.
    readlink -f /etc/mtab | grep '^/proc/' > /dev/null;

답변2

readlink -fPOSIX는 아니지만 코드가 원하는 대로 작동하는 것 같습니다.

POSIX가 아닌 또 다른 좋은 솔루션은 다음과 같습니다.

if [ "$(df --output=fstype  /etc/mtab  | tail -n +2)" = "proc" ]; then

(proc 파일 시스템이 /proc에 마운트되지 않은 경우에도 작동합니다)

하지만 현실 세계에서는 간단히 확인하는 것만으로도 충분할 수도 있습니다.

if [ -L /etc/mtab ]; then

마지막 것은 util-linux 테스트 스위트에서도 사용되었으며 지금까지 버그 보고서를 받지 못했습니다. 기존 Linux 배포판에서 /etc/mtab은 일반 파일이거나 /proc/self/mounts에 대한 심볼릭 링크인 것 같습니다.

관련 정보