shell-init가 발생하는 이유: egrep을 사용할 때 현재 디렉터를 검색하는 동안 오류가 발생함

shell-init가 발생하는 이유: egrep을 사용할 때 현재 디렉터를 검색하는 동안 오류가 발생함

변수에서 일부 이름을 제외하고 싶습니다.

# echo $names
abba begiz altonzon music aolala


# echo $names | grep -o '[^[:space:]]\+'
abba
begiz
altonzon
music
aolala

egrep다음을 사용하여 이 두 이름을 제외 하면

그런 다음 다음 예외가 발생합니다."shell-init: error retrieving current directory:"

#  echo $names | grep -o '[^[:space:]]\+' | egrep -iv "abba|begiz"
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
altonzon
music
aolala

이 예외를 피하는 방법은 무엇입니까?

답변1

egrep이는 일부 시스템, 적어도 데비안의 쉘에서는 삭제된 디렉토리에서 시작하는 것을 좋아하지 않는 쉘 스크립트입니다.

$ mkdir /tmp/z
$ cd /tmp/z
$ rm -r /tmp/z
$ egrep
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

이것이 Bash as /bin/shDash가 제공하는 것입니다.sh: 0: getcwd() failed: No such file or directory

grep -E쉘 스크립트 실행을 우회하거나 삭제된 디렉토리에서 실행하지 않으려면 직접 사용하십시오 .

관련된:현재 디렉터리를 삭제하면 어떻게 되나요?


완전히 다른 점은 현재 수행 중인 작업을 수행하는 데 다음과 같은 문제가 발생하지 않는 더 나은 방법이 있을 수 있다는 것입니다.분사그리고 와일드카드.

Bash에서는 배열을 사용할 수 있습니다.

names=(abba begiz altonzon music aolala)
newnames=()
for x in "${names[@]}"; do
    if [[ ! $x =~ ^(abba|begiz)$ ]]; then
        newnames+=("$x")
    fi
done
# do something with newnames

관련 정보