경고를 수정하는 방법 : 명령 대체 : 입력에서 null 바이트를 무시합니까?


12

notify-send를 사용해야하지만 root로 실행되는 스크립트가 있습니다. 내가 찾은 유일한 것은 이 스크립트 입니다. 문제는이 줄에 있다는 것입니다.

DBUS_SESSION=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | sed -e s/DBUS_SESSION_BUS_ADDRESS=//`

계속 오류가 발생합니다

warning: command substitution: ignored null byte in input

오류 메시지를 수정하거나 억제하려면 어떻게합니까?
그건 그렇고 다음은 그것을 억제하지 않습니다 :

2> /dev/null
> /dev/null
>> /dev/null
> /dev/null 2>&1
2>&1

답변:


15

이 경고는 Bash-4.4의 새로운 기능인 것으로 보입니다. 예를 들어 null 바이트로 명령을 대체하면 warning이 생성됩니다 .

하나의 옵션은 파이프 라인에서 널 바이트를 제거하거나 변환하는 것입니다.

DBUS_SESSION=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ | tr '\0' '\n' | sed -e s/DBUS_SESSION_BUS_ADDRESS=//)

( $(. . .)백틱 대신에 현대적인 형태의 명령 대체로 전환했습니다 ).

또는 bash 셸의 내장 read명령을 사용하여 null 구분 기호를 직접 처리 할 수 ​​있습니다.

IFS== read -d '' _ DBUS_SESSION < <(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$DBUS_PID/environ)

(널로 구분 된 grep 출력을 문자로 구분 된 두 개의 토큰으로 분리 =하십시오. 첫 번째는 정크 변수 _에, 두 번째는에 할당하십시오 DBUS_SESSION).

[적절한 최신 버전의 bash가 없기 때문에 실제로 테스트 할 수 없었습니다.]


인가 tr -d '\0'도 OK?
Konard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.