source

기록에 보관하지 않고 명령 실행

manysource 2023. 5. 5. 09:54

기록에 보관하지 않고 명령 실행

소프트웨어 개발을 수행할 때 종종 명령행 명령에 기밀 정보를 포함해야 합니다.일반적인 예는 프로젝트를 서버에 환경 변수로 배포하기 위한 자격 증명을 설정하는 것입니다.

일부 명령을 명령 기록에 저장하지 않으려면 어떻게 실행해야 합니까?

아무도 그것들을 검색할 수 없어야 합니다..bash_history파일. 이런 식으로 Bash 명령을 실행하는 방법이 있습니까?

명령을 공백으로 시작하면 기록에 포함되지 않습니다.

이 작업에는 환경 변수가 필요합니다.$HISTCONTROL예정된

  • 다음 명령이 반환되는지 확인합니다.ignorespace또는ignoreboth:

     echo $HISTCONTROL
    
  • 누락된 경우 환경 변수를 추가하기 위해 다음 행을 Bash 프로파일에 추가할 수 있습니다.예: 파일로%HOME/.bashrc.

     export HISTCONTROL=ignorespace
    

프로파일을 다시 소싱한 후에는 공백 접두사 명령이 다음에 기록되지 않습니다.$HISTFILE.

지정된 Bash 세션에서 다음을 입력하여 기록 파일을 /dev/null로 설정합니다.

export HISTFILE=/dev/null

주석에서 지적한 대로 이 세션의 명령은 기록에 기록되지 않습니다!

시스템 관리자의 수고를 방해하지 마십시오. ;)

두다의 해결책은 더 우아합니다.변수 설정을 취소합니다.unset HISTFILE(감사합니다!)

echo "discreet";history -d $(history 1)

John DoeCedric Royer의 답변연장.하지만, 이것은 저에게 효과가 있는 것 같습니다.

<your_secret_command>; history -d $((HISTCMD-1))

기록에 명령의 항목이 표시되지 않아야 합니다.

여기 설명이 있습니다...

'history -d'는 기록에서 언급된 항목을 삭제합니다.

HISTCMD는 다음에 실행할 명령_number를 저장합니다.그래서 (HISTCMD-1)은 마지막으로 실행된 명령을 말합니다.

Bash 기록 파일에서 특정 행 제거

Z 쉘을 사용하는 경우 (zsh실행할 수 있습니다.

setopt histignorespace

이 옵션을 설정한 에는 공백으로 시작하는 각 명령이 기록에서 제외됩니다.

에 별칭을 사용할 수 있습니다..zshrc설정/해제 방법:

# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'

alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'

세션을 시작할 수 있습니다.

export HISTFILE=/dev/null ;history -d $(history 1)

그런 다음 당신의 교활한 행동을 계속합니다.을 hist로 설정하기/dev/null기록 파일에 기록되지만 이 항목은 쉽게 삭제되고 추적(최소한 기록 파일에는)이 표시되지 않습니다.

또한, 이것은 영구적이지 않습니다.

당신은 역사가 없는 껍데기를 사용하는 것을 고려할 수 있습니다, 예를 들어, 아마도.

/bin/sh << END
   your commands without history
END

)로 표시됩니다./bin/dash또는/bin/sash보다 더 적절할 수 있습니다./bin/sh)

또는 배치 유틸리티를 사용하는 것이 더 좋습니다. 예를 들어,

batch << EOB
   your commands
EOB

는 그면기다포함다니됩음이록에러를 포함할 것입니다.sh또는batch그건 별로 의미가 없습니다.

두닷이 댓글로 언급한 것처럼.unset HISTFILE이것은 훌륭하지만, 당신이 또한 일부 기록을 삭제하고 싶을 때, 그렇게 하세요.echo $HISTFILE위치를 (일반적으로 기록파일가기오로).~/.bash_history),unset HISTFILE~/.bash_history(혹은 무엇이든지)HISTFILE물론 지금입니다.unset읽을 수 없습니다).

$ echo $HISTFILE       # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history   # Or your preferred editor

그러면 당신은 당신의 역사를 편집했고, 당신이 그것을 편집했다는 사실을!

다음 명령도 사용할 수 있습니다.

echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')

저는 이것이 매우 휴대하기 쉬운 명령이라고 생각합니다.

이를 달성할 수 있는 몇 가지 방법이 있습니다.기록 파일의 크기를 0으로 설정합니다.

export HISTFILESIZE=0

이 기파일다설정니다합로음으로 설정됩니다./dev/null효과적으로 비활성화:

export HISTFILE=/dev/null

개별 명령의 경우 명령 앞에 공백을 추가할 수 있으며 기록 파일에 저장되지 않습니다.는 이위서다필니다합요음이는를이 합니다.ignorespace에 된 값$HISTCONTROL및 검색)ignorespace자세한 내용은)을 참조하십시오.

실행하기만 하면 됩니다.
$ set +o history

자세한 내용을 보려면 실행:
$ man set

이것은 여러분이 모든 역사를 지웠다는 사실을 포함하여 모든 역사를 지우고 싶다면 편리합니다!

rm .bash_history;export HISTFILE=/dev/null;exit

이 명령은 유용할 수 있습니다.실행된 명령은 기록되지 않습니다.

history -d $((HISTCMD-1)) && <Your Command Here>

언급URL : https://stackoverflow.com/questions/8473121/execute-a-command-without-keeping-it-in-history