쉘에서 명령을 실행하기 전에 항상 사용자에게 프롬프트


10

sudo비밀번호를 요청 하는 방식과 유사한 명령을 실행하기 전에 항상 사용자에게 확인을 요청 하는 유틸리티가 있습니까?


1
정말로 어떤 명령을 원하십니까? 포함 cd하고 ls?
Carsten Thiel

.bashrc의 자체 별칭으로 사용하고 싶습니다.
m33lky

답변:


9

추가 명령을 입력하지 않고 작동 하시겠습니까? 예 :

$ rm file

또는 사용자가 다음과 같은 것을 입력 할 때만

$ confirm rm file

또는 사용자가 특정 명령을 실행하려고 할 때만

$ rm file

그러나

$ echo "Hello"

옵션 1 인 경우 zsh의 사전 실행 후크 또는 bash의 DEBUG 트랩을 사용하여 수행 할 수 있습니다.

옵션 2 인 경우 이와 같은 것을 /etc/bash.bashrc다른 쉘 시작 파일 에 넣으십시오 .

confirm() {
    echo -n "Do you want to run $*? [N/y] "
    read -N 1 REPLY
    echo
    if test "$REPLY" = "y" -o "$REPLY" = "Y"; then
        "$@"
    else
        echo "Cancelled by user"
    fi
}

옵션 3 인 경우 confirm위 의 스크립트를 수정 하거나 일부 명령에 무언가를하기 전에 물어볼 수있는 옵션이 있습니다 (예 :) rm -i. 당신은 넣을 수 alias rm='rm -i'에서 /etc/bash.bashrc.


나는 항상 두통을주는 하나의 단일 명령에 대해서만 확인을 원합니다. 스크립트는 어떻게 생겼습니까?
Danijel

10

나는 bash를 약간 가지고 놀고 이것이 가능할 수있는 핵을 알아 냈습니다.

#!/bin/bash

debug_trap () {
    echo "executing $BASH_COMMAND"
    echo "Allow?"
    select choice in yes no
    do
        if [ "$choice" = "yes" ]
        then break
        elif [ "$choice" = "no" ]
        then return 1
        fi
    done
}

shopt -s extdebug
trap debug_trap DEBUG

당신은 말하자면에서이 스크립트를 저장, 수 confirm-any-command.shsource당신의 그것을 bashrc. 실행할 각 명령의 확인을 요청합니다.

이것은 개념 증명 핵에 지나지 않습니다. 이 형식에서 실제로 유용 할 수 있을지 의심됩니다. 입력 한 모든 명령을 확인해야하는 경우 각 명령 후에 자동으로 "예"를 누르는 습관을 얻게됩니다. "명령의 끝"에 대한 당신의 정신 매핑 그냥 변경됩니다 EnterEnter, yes, Enter- 당신이 전체로 입력되고, 심지어는 것을 확인에 시간을 보내고 노력하지 않는 정말 이 명령을 실행합니다. 이것은 비생산적이며 도움이되지 않습니다.


에 중지 Allow? 1) yes 2) no #? 하지도 yes않고 no작업이 무한 루프 (데비안 8)을 일으키지 않는
vladkras

@vladkras read help select: 1또는 2대신 yes또는 입력해야합니다 no. 유효하지 않은 입력에 대한 자동 재 시도는 의도 된 동작으로 (스크립트 작성기가 while자신 을 재발 명 할 필요가없고 , 간결함과 명확성을 유지함) EOF 입력이 루프를 종료합니다. 이를 알면 위의 스크립트가 작동하는지 스스로 확인할 수 있습니다. 어쨌든 개념 증명의 조잡한 증거이므로 수정하지 않을 것입니다.
ulidtko

사실입니다. 나는 당신의 혼란 한 y e s Enter
vladkras

0

먼저 터미널을 엽니 다.

그런 다음

cd ~
touch .sure
chmod 700 .sure

그런 다음 .sure를 열고 안에 붙여 넣습니다.

#!/bin/bash --init-file
PS1='> '
alias y='
    $1
    exit
'
alias n='killall Terminal'
echo ''
echo 'Are you sure? Answer y or n.'
echo ''

그런 다음 파일을 닫습니다.

~/.sure ; ENTER COMMAND HERE

명령을 계속하기 전에 확인 메시지가 표시됩니다.

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