리눅스 쉘 mem 변수의 전역 리눅스 메모리 - 쉘에서

리눅스 쉘 mem 변수의 전역 리눅스 메모리 - 쉘에서

환경 변수를 설정하고 메모리의 파일을 편집하지 않고 다른 쉘에 영향을 줄 수 있는 방법이 있습니까? 이 방법은 시스템에 연결하는 모든 새 사용자에게 적용되며 다음에 Linux 시스템을 재부팅한 후에만 적용됩니까?

나는 내 Linux에서 컴퓨터가 부팅될 때만 (스크립트에서) 작동하는 것을 기억하려고 노력하고 있으므로(따라서 파일이 필요하지 않음) 내 쉘에서 연결된 모든 사용자에 대해 일부 플래그를 설정하고 싶습니다. 예:

linux_test_run=yes

그러나 나는 해당 Linux에서 열린 새로운 셸에서 작동하기를 원합니다. 다음에 누군가가 컴퓨터를 재부팅하면 변수가 사라지기를 바랍니다.

이를 달성하기 위해 내가 할 수 있는 (간단한) 작업이 있나요? (파일을 사용하지 않고...)

답변1

export환경의 하위 프로세스에 전달될 변수를 표시하는 데 사용할 수 있습니다 .

export linux_test_run=yes

새로 연결된 사용자가 이 변수를 사용할 수 있도록 하려면 셸의 초기화 파일을 편집해야 합니다.

답변2

글쎄, 거기에 있는 파일은 /tmp일반적으로 재부팅 시 정리되므로 "파일이 존재하면 가져옵니다"와 같은 파일을 가져오는 스크립트를 포함하는 것은 어떨까요? 그런 다음 필요에 따라 해당 파일에서 초기화할 수 있습니다. 이는 /etc/profile.

그런데 문맥이 잘 이해가 안 되네요. 수행하려는 작업에 대한 자세한 내용을 제공할 수 있으면 더 나은 답변을 얻을 수 있습니다.

답변3

대부분의 로그인 방법은 환경 변수를 읽습니다 /etc/profile. (다른 가능성이 있을 수도 있지만 이것이 조치하기 가장 쉽습니다.) 따라서 제가 올바르게 이해했다면 /etc/profile다음 재부팅 시 환경 변수 할당을 추가하고 이후 재부팅 시 이를 제거하고 싶을 것입니다.

먼저, 아직 없는 경우(일부 배포판에는 설정되어 있음)라는 디렉터리를 만들고 /etc/profile.d이 코드 조각을 다음에 추가합니다 /etc/profile.

for x in /etc/profile.d/*.sh; do
  . "$x"
done
unset x

export linux_test_run=yes이라는 파일이 포함된 파일을 만듭니다 /etc/profile.d/test_run.sh.0.

다음 코드 조각을 /etc/rc.local(또는 시작 시 실행되는 다른 스크립트)에 추가합니다.

for x in /etc/profile.d/*.sh.[0-9]*; do
  n=${x##*.}              # extract the part after the last .
  case n in
    *[!0-9]*) continue;;  # n is not a number, so skip this file
    *[1-9]*) mv "$x" "${x%.*}.$(($n-1))";; # decrement the number in the file name
    *)     # the file is *.sh.0, so rename to .sh and schedule for deletion
      echo "${x%.*}" >>/etc/profile.d/cancel-on-reboot.list
      mv "$x" "${x%.*}";;
  esac
done
if [ -e /etc/profile.d/cancel-on-reboot.list ]; then
  # rename all files in this list so they won't be considered any longer
  while read -r x; do
    mv "$x" "$x.cancelled"
  done </etc/profile.d/cancel-on-reboot.list
  rm /etc/profile.d/cancel-on-reboot.list
fi

재부팅 후 이 설정을 다시 활성화하려면 이름을 *.sh.0.

답변4

bashrc죄송합니다. 시작 파일을 어딘가 에서 편집해야 합니다 /etc. 아마도 .

그러나 파일을 사용하지 않으려는 유일한 이유가 재부팅 시 이 동작이 사라지기를 원하는 경우에는 다른 방법이 있습니다.

  1. ​이 파일 setvariable.bash에서 .bashrc
  2. /etc/init.d재부팅 시 시작될 파일을 파일에 넣고 비활성화합니다 setvariable.bash(빈 파일이나 다른 것으로 교체).

해킹이지만 작동할 수도 있습니다.

관련 정보