기록에 보관하지 않고 명령 실행
소프트웨어 개발을 수행할 때 종종 명령행 명령에 기밀 정보를 포함해야 합니다.일반적인 예는 프로젝트를 서버에 환경 변수로 배포하기 위한 자격 증명을 설정하는 것입니다.
일부 명령을 명령 기록에 저장하지 않으려면 어떻게 실행해야 합니까?
아무도 그것들을 검색할 수 없어야 합니다..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 Doe와 Cedric Royer의 답변의 연장.하지만, 이것은 저에게 효과가 있는 것 같습니다.
<your_secret_command>; history -d $((HISTCMD-1))
기록에 명령의 항목이 표시되지 않아야 합니다.
여기 설명이 있습니다...
'history -d'는 기록에서 언급된 항목을 삭제합니다.
HISTCMD는 다음에 실행할 명령_number를 저장합니다.그래서 (HISTCMD-1)은 마지막으로 실행된 명령을 말합니다.
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
'source' 카테고리의 다른 글
내부 vs.개인 액세스 수정자 (0) | 2023.05.05 |
---|---|
내 파일을 무시하는 gitignore 규칙 설명 (0) | 2023.05.05 |
Bash 명령 프롬프트에 git 분기 추가 (0) | 2023.05.05 |
어떻게 하면 C에서 int를 문자열로 변환할 수 있습니까? (0) | 2023.05.05 |
Azure/에서 과도한 HTTP 응답 헤더 제거/숨기기/사용 안 함UrlScan이 없는 IIS7 (0) | 2023.05.05 |