저는 PIN을 변수로 한 번 읽고 이를 사용하여 이 PIN이 필요한 여러 명령을 호출하는 간단한 셸 스크립트를 작성하고 있습니다. 이러한 명령은 표준 입력에서 PIN을 읽도록 지시할 수 있지만 프로세스 목록에 표시하지 않고 변수 값을 파이프로 보내는 방법을 모르겠습니다. 일반적인 방법(사용 echo "$PIN"
)은 다른 사용자가 프로세스 목록을 통해 PIN 값을 볼 수 있도록 대체를 수행합니다.
변수 이름을 받아들이고 해당 변수의 값을 표준 출력으로 인쇄하는 명령이 있습니까? 아니면 다른 방법이 있나요?
답변1
모든 쉘에 내장되어 있으므로 echo
프로세스 목록에 표시되지 않습니다.
좀 더 안정적인 것을 사용할 수 있지만 printf '%s\n' "$PIN"
일부 pdksh 기반 쉘에는 아직 printf
해당 기능이 내장되어 있지 않습니다. 이러한 문제에 대한 해결책 print -r -- "$PIN"
은 모든 구현에서 사용할 수 있지만 print
표준은 아닌 .zsh
ksh
여기에서 설명서를 사용할 수도 있습니다.
cmd << EOF
$PIN
EOF
(또는 이제 여기에서 string( cmd <<< "$PIN"
) zsh
과 다른 쉘을 사용하십시오). 그러나 대부분의 구현에서 여기에 있는 문서는 임시 파일을 사용하여 구현되므로 파일이 디스크에 커밋된 경우 PIN을 오프라인으로 복원할 수 있습니다.
피할 수 있다면 환경으로 내보내지 않는 것이 좋습니다. PIN
다른 프로세스에서 더 쉽게 발견할 수 있기 때문입니다( /proc/pid/environ
동일한 uid를 가진 프로세스는 읽을 수 있지만 일반적으로 어떤 프로세스가 다른 프로세스의 것을 읽을 수 있는지에 대해서는 더 많은 제한이 있습니다). 메모리) . ps
일부 (희귀한) 시스템에서는 모든 프로세스의 환경을 볼 수도 있습니다.
그러나 환경 내부에 들어가면 일부 시스템에는 printenv
해당 값을 표시하는 명령이 있습니다.
printenv PIN
또는 언제든지 다음을 사용할 수 있습니다 perl
.
perl -le 'print $ENV{PIN}'