프로세스 목록에서 변수 값을 숨기면서 파이프로 변수 값을 보내는 방법은 무엇입니까?

프로세스 목록에서 변수 값을 숨기면서 파이프로 변수 값을 보내는 방법은 무엇입니까?

저는 PIN을 변수로 한 번 읽고 이를 사용하여 이 PIN이 필요한 여러 명령을 호출하는 간단한 셸 스크립트를 작성하고 있습니다. 이러한 명령은 표준 입력에서 PIN을 읽도록 지시할 수 있지만 프로세스 목록에 표시하지 않고 변수 값을 파이프로 보내는 방법을 모르겠습니다. 일반적인 방법(사용 echo "$PIN")은 다른 사용자가 프로세스 목록을 통해 PIN 값을 볼 수 있도록 대체를 수행합니다.

변수 이름을 받아들이고 해당 변수의 값을 표준 출력으로 인쇄하는 명령이 있습니까? 아니면 다른 방법이 있나요?

답변1

모든 쉘에 내장되어 있으므로 echo프로세스 목록에 표시되지 않습니다.

그러나 임의의 데이터에 대해서는 신뢰할 수 없습니다.

좀 더 안정적인 것을 사용할 수 있지만 printf '%s\n' "$PIN"일부 pdksh 기반 쉘에는 아직 printf 해당 기능이 내장되어 있지 않습니다. 이러한 문제에 대한 해결책 print -r -- "$PIN"은 모든 구현에서 사용할 수 있지만 print표준은 아닌 .zshksh

여기에서 설명서를 사용할 수도 있습니다.

cmd << EOF
$PIN
EOF

(또는 이제 여기에서 string( cmd <<< "$PIN") zsh과 다른 쉘을 사용하십시오). 그러나 대부분의 구현에서 여기에 있는 문서는 임시 파일을 사용하여 구현되므로 파일이 디스크에 커밋된 경우 PIN을 오프라인으로 복원할 수 있습니다.

피할 수 있다면 환경으로 내보내지 않는 것이 좋습니다. PIN다른 프로세스에서 더 쉽게 발견할 수 있기 때문입니다( /proc/pid/environ동일한 uid를 가진 프로세스는 읽을 수 있지만 일반적으로 어떤 프로세스가 다른 프로세스의 것을 읽을 수 있는지에 대해서는 더 많은 제한이 있습니다). 메모리) . ps일부 (희귀한) 시스템에서는 모든 프로세스의 환경을 볼 수도 있습니다.

그러나 환경 내부에 들어가면 일부 시스템에는 printenv해당 값을 표시하는 명령이 있습니다.

printenv PIN

또는 언제든지 다음을 사용할 수 있습니다 perl.

perl -le 'print $ENV{PIN}'

관련 정보