기록에 유지하지 않고 명령 실행 [닫기]


203

일부 명령을 실행하고 싶지만 명령 기록에 저장하고 싶지 않습니다. 따라서 아무도 .bash_history파일 에서 검색 할 수 없습니다.

이 방법으로 bash 명령을 실행하는 방법이 있습니까?


13
이 질문은 아마도 "서버 관리자"만큼 "프로그래밍"되지 않기 때문에 ServerFault로 옮겨야합니다. 그러나 질문 / 답변에 감사드립니다.
Andrew Theken

답변:


294

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

환경 변수 $HISTCONTROL를 설정 해야합니다 .

  • 다음 명령이 반환되는지 확인 ignorespace하거나 ignoreboth

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

    export HISTCONTROL=ignorespace

프로파일을 다시 소싱 한 후에는 공간 접두사가 붙은 명령이 작성되지 않습니다. $HISTFILE


20
ignorespace가 $ HISTCONTROL에 포함되어 있지 않으면 작동하지 않습니다. 아마도 대부분의 시스템에서 기본값 일 것입니다.
pgl

2
옳은. 자세한 내용은 OP가 bash 매뉴얼 페이지에서 HISTCONTROL 및 HISTIGNORE를 참조하십시오.
u-punkt

2
thegeekstuff.com/2008/08/…- 이력에서 명령을 숨기는이 방법을 포함하여 더 많은 bash 이력 팁을 사용할 수 있습니다.
user379997

52

주어진 Bash 세션에서 다음을 입력하여 히스토리 파일을 / dev / null로 설정하십시오.

export HISTFILE=/dev/null

주석에서 지적했듯이 이것은 세션의 명령을 기록에 쓰지 않습니다!

시스템 관리자의 노력을 망쳐 놓지 마십시오.;)

Doodad의 솔루션 은 더욱 우아합니다. 변수를 설정 해제하기 만하면됩니다 : unset HISTFILE(감사합니다!)


5
이렇게하면 모든 명령이 기록 되지 않습니다 . 질문자가 원하는 것이 아닙니다.
Noufal Ibrahim

12
이로 인해 /dev/null로그 아웃시 권한이 0600으로 설정되는 문제가 발생했습니다 . 대신 나는을 사용했다 unset HISTFILE.
Doodad


21

@John Doe & @ user3270492의 답변 확장. 그러나 이것은 나를 위해 작동하는 것 같습니다.

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

히스토리에 명령 항목이 표시되지 않아야합니다.

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

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

HISTCMD는 다음에 실행될 명령의 command_number를 저장합니다. 따라서 (HISTCMD-1)은 마지막으로 실행 된 명령을 나타냅니다.

Bash 기록 파일에서 특정 줄을 제거하십시오.


불행히도 이것은 나를 위해 작동하지 않았습니다.
Magick

10

아마도 역사처럼 쉘을 사용하는 것을 고려할 수 있습니다.

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

(아마도 /bin/dash또는 /bin/sash보다 더 적합 할 수 있음 /bin/sh)

또는 배치 유틸리티를 더 잘 사용하십시오.

batch << EOB
   your commands
EOB

역사는 포함됩니다 sh또는 batch이는 매우 의미가 없습니다


8

당신은 세션을 시작할 수 있습니다

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

그런 다음 은밀한 행동을 계속하십시오. histfile을 설정하면 /dev/null히스토리 파일에 기록되지만이 항목은 즉시 삭제되며 최소한 히스토리 파일에 추적이 표시되지 않습니다.

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


이것은 이미 여러 번 대답되었습니다. 쓸모없는 소음을 제외하고이 스레드에 대한 답변이 무엇이라고 말 하시겠습니까?
gniourf_gniourf

그것은되지 않은 하나의 대답에 함께 넣어 그래서 그 자체가 역사에 표시 명령을 가지고 있지에 관한, 그리고 그 이후에 입력 한 것까지 아무것도 쇼가 없습니다.
Christian

1
그러나 지금이 스레드는 진짜 엉망입니다! 이 경우, 특히 오래된 질문에 대해서는 이미 기존의 정답을 편집하거나 의견을 남기는 것이 좋습니다.
gniourf_gniourf

5

코멘트 에서 Doodad가 언급했듯이 , 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

그런 다음 기록을 편집하고 편집 한 사실을 편집했습니다!


GNU bash, 버전 3.2.57 (1)-릴리스 (x86_64-apple-darwin15)에서 시도했지만 작동하지 않습니다. unset HISTORY 이후에 사용한 명령은 ~ / .bash_history
Krystian

@Krystian 내 실수- "unset HISTORY"가 "unset HISTFILE"이어야했을 때 수정되었습니다. 지금 작동합니까? GNU bash 버전 4.3.30 (1)-릴리스 (x86_64-pc-linux-gnu)에서 작동합니다.
drkvogel

잘 모르겠습니다. 간단한 테스트 : 이전에서 마지막으로 unset HISTFILE; echo TEST; history명령 echo TEST을 제공합니다 . 세션을 종료하고 다시 연결 한 후에도 히스토리에는 실제로이 항목이 없습니다. 그래서 나는 그것이 작동한다고 말할 것입니다 :)
Krystian

unset HISTFILE메모리의 히스토리에 기록 된 명령을 중지하는 것 같지 않지만 $ HISTFILE이었던 파일에 기록되는 명령은 중지합니다. 따라서 여전히 로컬 기록이 메모리에 있다고 생각하지만 더 이상 파일에 기록되지 않으므로 원하는 것입니다! ;)
drkvogel 2016 년

4

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

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

나는 그것이 매우 휴대용 명령이라고 생각합니다.


나는 이것으로부터 별명을 만들었다 : alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"그리고 지금 당신은 다음과 같이 할 수있다 :mysql -uroot -pSecretPassword ; forget
sobi3ch

1
죄송하지만 인용 부호의 의미 $s와 sed의 다른 변경으로 인해 별칭 대신 함수를 만들어야한다는 것을 알고 있습니다 . function forget() { // put code here // }
sobi3ch

3

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."'


2

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

export HISTFILESIZE=0

히스토리 파일을로 설정하여 /dev/null효과적으로 비활성화합니다.

export HISTFILE=/dev/null

개별 명령의 경우 명령 앞에 공백을두면 내역 파일에 저장되지 않습니다. 이를 위해서는 환경 변수 ignorespace에 값이 포함되어 있어야 $HISTCONTROL합니다 (man bash 및 ignorespace자세한 내용 검색 ).


2
이렇게하면 모든 명령이 기록 되지 않습니다 . 질문자가 원하는 것이 아닙니다.
Noufal Ibrahim

글쎄, 나는 질문자가 기록되어서는 안되는 것을 원하는대로 한 후에 값을 재설정 할 것이라고 가정했다.
pgl

1

모든 기록을 지운 사실을 포함하여 모든 기록을 지우려는 경우에 편리합니다!

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

0

당신은 단지 실행해야합니다 :
$ set +o history

자세한 내용을 보려면 다음을 실행하십시오.
$ man set


2
개별 명령이 아닌 이후의 모든 명령에 대한 기록을 비활성화합니다. 여기에 오는 대부분의 사람들은 대신에 대답을보아야합니다.
tripleee

이것은 유효하거나 괜찮지 만 불완전합니다. set -x history나중에 reverse 명령을 추가하면 작동합니다.
Abdillah

0

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

history -d $((HISTCMD-1)) && <Your Command Here>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.