다음 줄을 실행했습니다.
which lsb_release 2&>1 /dev/null
산출:
error: no null in /dev
에 오류가 ls /dev/null
있는지 확인하기 위해 명령을 사용할 때 이 오류가 발생하는 이유는 무엇입니까? 나는 이 문제를 해독할 수 없다.null
/dev
고쳐 쓰다
방금 which
다른 사람의 시스템에서 위 명령을 시도했는데 오류가 발생하지 않고 정상적으로 실행되었습니다.
답변1
첫째, 리디렉션은 반드시 끝이나 시작 부분이 아닌 명령줄의 어느 곳에서나 발생할 수 있습니다.
예를 들어:
echo foo >spamegg bar
foo bar
파일에 저장됩니다 spamegg
.
또한 두 가지 버전이 있습니다 which
. 하나는 내장 셸이고 다른 하나는 외부 실행 파일( debianutils
Debian과 함께 제공됨)입니다.
귀하의 명령에 따라:
which lsb_release 2>&1 /dev/null
이렇게 하면 먼저 수행되는 2&>1
리디렉션이 아니라 STDOUT(FD 1)이 가리키는 위치로 STDERR(FD 2)을 리디렉션하게 됩니다 ./dev/null
따라서 나머지 명령은 다음과 같습니다.
which lsb_release /dev/null
유사한 명령이 없으므로 /dev/null
오류가 발생합니다.
이 동작은 which
쉘이 내장인지 외부 실행 파일인지에 따라 달라지며, bash
내장이 없고 external 을 사용하면 ksh
오류 메시지가 표시되지 않고 오류가 무시됩니다.dash
which
반면에 zsh
내장 which
및 디스플레이를 사용하십시오.
/dev/null not found
which
따라서 아마도 이 특정 오류는 사용 중인 셸의 내장 명령에 의해 표시됩니다.
또한 IE에 존재하지 않는 /dev/null
경우 오류를 표시하기 위해 STDERR을 리디렉션하려는 것 같습니다 . lsb_release
그렇다면 STDERR을 다음으로 리디렉션하십시오.PATH
which
/dev/null
which lsb_release 2> /dev/null
답변2
명령에 대한 구문 오류가 있습니다 which lsb_release 2&>1 /dev/null
.
which lsb_release 2> /dev/null
"sh" 유형의 쉘을 실행한다고 가정하고 이 명령을 실행하게 될 것 입니다 .
쉘 유형을 실행하는 경우 csh
stderr 리디렉션에 더 많은 문제가 발생합니다.