기본 별명 경보 는 명령에 대한 것입니다.
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"
실행 alert
하면 텍스트 경고 및 터미널 아이콘이 포함 된 알림이 표시 됩니다. 하나의 매개 변수로 실행하면 alert !!!!!
텍스트 경고 !!!!! 그리고 !!!!! .
따라서 간단한 notify-send
명령과 알림 보내기, 에코, 기록, 꼬리 및 sed 를 사용하는이 복잡한 별칭 의 차이점은 무엇 입니까?
어떤 상황 에서이 별칭이 유용하거나 pun을 위해 방금 생성 되었습니까? sudo sudo sudo sudo sudo apt-get install
우분투 12.10을 사용하고 있습니다.
답변
매뉴얼 페이지를 사용하여 여기에 결합 된 명령의 세부 사항을 얻을 수 있습니다. 다음은 이러한 명령의 목적에 대한 것입니다.
"$([ $? = 0 ] && echo terminal || echo error)"
이것은 실행 상태에 따라 터미널 또는 오류 를 에코 합니다- 마지막 명령 각각에 성공 또는 실패 합니다. 결과는 아이콘을 표시하기위한 -i
스위치의 값 notify-send
입니다.
history|tail -n1
.. 마지막 명령을 실행합니다.
와 sed
함께 표시 할 텍스트 구문 분석 notify-send
메시지를.
이를 이해하려면 다음을 시도하십시오.
true; echo "$([ $? = 0 ] && echo terminal || echo error)"
.. 이것은 터미널 을 에코 합니다.
false; echo "$([ $? = 0 ] && echo terminal || echo error)"
.. 이것은 오류를 에코 합니다 .
notify-send -i terminal 'Please note the icon..' 'the default icon for the terminal has been used. You can specify any other icon of your choice'
과,
echo $?
..는 마지막으로 실행 된 명령의 종료 값을 아는 데 매우 유용합니다.
echo "$(echo "the output of this command enclosed within \$(...)") is being supplied here in the outer echo command where is used as an argument."
.. 명령 콤보에서 echo
사용하기위한 간단한 데모로 설정되었습니다 $()
.
답변
여기서 무슨 일이 일어나고 있는지 설명해 드리겠습니다.
notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"
1 --urgency=low
-u, –urgency = LEVEL 긴급 수준 (낮음, 보통, 위험)을 지정합니다.
2 -i "$([ $? = 0 ] && echo terminal || echo error)"
.
-i, --icon=ICON[,ICON...] Specifies an icon filename or stock icon to display.
이 부분 "$([ $? = 0 ] && echo terminal || echo error)"
. $?
마지막으로 반환 된 오류 (또는 성공)입니다. 따라서 마지막 명령 종료 코드가 0 인 경우 오류없이 “터미널”텍스트를 반환합니다. 종료 코드가 0이 아닌 경우 “오류”를 반환합니다.
마지막으로 “터미널”또는 “오류”아이콘이 나타납니다.
삼 $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
history|tail -n1
기록에서 마지막 명령을 반환합니다.
sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')
이것은 sed의 2 블록으로 분리 될 수 있습니다.
3.1. sed 's/^\s*[0-9]\+\s*//'
앞의 공백과 탭을 모두 제거한 다음 그 뒤에 숫자를 표시하고 끝에 공백과 탭을 제거하십시오.
3.2. s/[;&|]\s*alert$//
선행 기호 ;
&
|
, 탭 및 공백 및 단어 “경고”를 제거합니다.
기호에서 마지막으로 실행 된 명령과 끝에 “경고”라는 단어 만 있으면됩니다.
따라서 다음과 같은 것을 사용하면 :
echo "Hello alert" | alert
이전 명령과 함께 경고를 표시합니다.
답변
현재 답변 은 경보의 내부 작동 방식 (호기심에서 찾고 싶었고 나를 여기로 데려 간 방법)을 설명한다고 생각합니다 . 그러나 나는 원래의 OP가 그것이 선언의 위의 칭찬을 이해하면서 설명하려고 할 유용한 것이 무엇인지 묻고 있다고 생각합니다 .
기본적으로 터미널이 끝날 때까지 터미널을보고 앉아있을 수 없을 때 명령이 완료되면 경고하는 데 사용됩니다. 권장 예제 에 따라 터미널 아이콘이 성공한 경우 sleep 10; alert
( sleep 10
이 경우) 명령 알림이 표시됩니다 (sleep 10은 완료하는 데 10 초가 소요됨).
이것으로부터 <command>; alert
명령을 명령으로 대체 할 때 사용해야한다는 것을 알 수 있습니다 . 개인적으로 wget을 통해 매일 비디오를 다운로드해야합니다. 주기적으로 실패하기 때문입니다. 따라서 다운로드 명령에 경고를 추가하여 실패했을 때 즉시 알리면 다시 계속할 수 있습니다 (내 경고가 수정되어 경고음이 울립니다).
답변
그 이유는 sed
, tail
그리고 history
당신이 입력하는 메시지가 필요하기 때문입니다있다. (어떤 이유로) 입력 한 내용은 변수를 통해 직접 사용할 수 없습니다. 따라서 history
입력 한 모든 항목의 목록 tail -n1
을 가져와 마지막으로 입력 한 항목을 가져오고 일부 정규 표현식을 사용하여 시작시 “경고”명령을 제거해야합니다.
이것을 확장하기 위해 조건부 명령 $? = 0
이있어서 참 인지 테스트 합니다. 내가 알 수있는 것에서, 그것이 사실이라면, 그것은 터미널에서 오는 것이며 정상적인 메시지로 간주되어야합니다. 그렇지 않으면 오류로 간주되고 오류 아이콘이 나타납니다.