폴더를 입력 할 때 경고 메시지를 표시하는 방법은 무엇입니까?


3

이것이 가능한지 모르겠지만 사용자가 입력 할 때 경고 메시지를 표시하고 싶은 폴더가 있습니다. 필자의 경우 디스크 공간을 절약하기 위해 이전 경고없이 폴더를 삭제할 수 있다고 말합니다. 경고 메시지와 함께 폴더 안에 이미 파일을 만듭니다.

WARNING!
##########################################################################################################################################################
Please, 
be advised, that the folder /company-backup/amazon-s3 can be deleted without previous WARNING to save disk space as the INFRASTRUCTURE TEAM judge necessary.

Best regards,
Infrastructure Team.
###########################################################################################################################################################

가능합니까? 어떤 아이디어?


1
사용자는 쉘 세션 내에이 폴더를 입력합니까? (또는 FTP를 통해?) 셸이 모든 사용자에게 동일하게 사용됩니까? zsh당신 과 함께 간단하게 사용할 수 있습니다 chpwd () { [[ -e .readme ]] && cat .readme }. chpwd현재 작업 디렉토리가 변경 될 때마다 호출 .readme됩니다. 물론 메시지입니다. 이것은 다른 쉘에서도 가능해야합니다. 최악의 경우 재정의를 통해 cd.
mpy

@mpy 이것이 지난 24 시간 동안 의견으로 주었던 두 번째 좋은 답변입니다 . 왜 답변으로 작성하지 않습니까?
terdon 2016 년

@ terdon : 너무 게으른 때문에 ;). OP의 더 많은 정보가 여기에 있으므로 폴더 별 알림을 많이 사용하기 때문에 답을 쓰는 것이 좋습니다.
mpy

@ mpy, 귀하의 손실, 나는 방금 링크 된 게시물에서 내 답변에 귀하의 의견을 훔쳤습니다. 당신은 모두이 micely을 할 수 있어야 bash하고 zsh사용자가 설정 한 경우에 cd당신이 제안 함수에 별칭이 될 수 있습니다.
terdon 2016 년

@ terdon : 하하, 난 괜찮아-잘 했어. Btw. Oliver Salzburg는 메타에 관한 주제에 대해 정말 좋은 의견을 남겼습니다 ( meta.superuser.com/a/6830/195224 ).
mpy

답변:


6

사용자가 명령 행을 통해 디렉토리에 액세스하는 경우 한 가지 가능성이 있습니다.

cd전역 rc파일 에서 쉘의 내장 명령을 재정 의하여 파일 .readme이 현재 디렉토리에 존재 하는지 확인하고, 존재하면 표시합니다 (좋은 광학 요소 포함).

에이. zsh( /etc/zshrc) 당신은 특별히 디자인 된 후크 함수 (사용하여 chpwd현재 작업 디렉토리가 변경 될 때마다 호출) :

function chpwd {
  if [[ -e .readme ]]; then
    echo
    echo \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#
    cat .readme
    echo \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#
    echo
fi }

비. 비슷한 가능성이 있는지 모르겠어요 bash하지만 당신이 다시 정의 할 수 있습니다, cd/etc/bash.bashrc:

cd() {
   builtin cd "$@"
   if [[ -e .readme ]]; then
     echo
     echo \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#
     cat .readme
     echo \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#
     echo
   fi
}

씨. 마지막으로 csh( /etc/csh.cshrc) 구문 과 동일 합니다.

alias cd 'cd \!*; eval "if (-e .readme) then \\
  echo \\
  echo ################################################################################ \\
  cat .readme \\
  echo ################################################################################ \\
  echo \\
endif"'

그리고 이것이 어떻게 생겼는지 :

user@machine:~> cd temp

################################################################################
Attention! This is a temporary directory!
################################################################################

user@machine:~/temp> 

아, 이것은 내 대답에 사용한 멋진 대안입니다! bash 및 csh 메서드도 추가 한 것을 알지 못했습니다.
벤 리차드

2

inotify-tools를 사용하십시오 .

$ inotifywait -E YOUR_DIRECTORY를 엽니 다

예:

$ inotifywait -e open for_delete
Setting up watches.  
Watches established.
for_delete/ OPEN,ISDIR
$

위의 링크에 스크립트의 좋은 예가 있습니다.


0

zsh에 관한 제안은 좋았지 만 bash를 위해 무언가를하고 싶다면 직접 스크립트를 작성해야 할 수도 있습니다. cd다른 목적으로 bash 의 명령에 연결 했지만 (터미널 창의 제목에 PWD를 표시 합니다) 디렉토리에 .readme파일을 cd넣을 때마다 동일한 기술을 사용하여 파일을 정리 할 수 있습니다 .

내가 한 모든 것은 cd( builtin실제 명령을 덮어 쓸 수 있도록 키워드를 사용합니다 -또한 사용할 수 있습니다 \cd) 스크립트를 작성하고 완료 후 원하는 작업을 수행했습니다. 스크립트를 홈 디렉토리 ( ~/scripts개인적으로 좋아함)에 저장 한 다음 .bashrc소스 파일 을 만드는 별명을 파일 에 만들었 습니다.

이것이 나를 찾는 방법입니다. 귀하의 경우 echo명령 대신 에을 원할 것 cat $PWD/.readme입니다.

~ / scripts / cd.sh :

builtin cd $1
echo -ne "\033]0;$shell_title - `pwd | sed "s|$HOME|~|g"`\007"

~ / .bashrc :

alias cd='source ~/scripts/cd.sh'

이제 cd터미널에 입력 할 때마다 디렉토리와 창 제목을 변경하여 해당 스크립트를 소싱합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.