저는 일부 쉘 명령을 실행하기 위해 AutoHotkey 매크로를 사용하고 있습니다.즉
^`::
SendInput set c=".cshrc-acheong"{ENTER}
SendInput set v=".vimrc-acheong"{ENTER}
SendInput foreach d ( /home/acheong /home/tcama /userhome/andrew.cheong ){ENTER}
SendInput if ( -e $d/$c ) source $d/$c{ENTER}
SendInput if ( -e $d/$v ) alias vim "vim -N -u $d/$v"{ENTER}
SendInput end{ENTER}
return
AutoHotkey를 처음 사용하신다면 문제 없습니다. 여러 줄의 쉘 명령을 한 번에 붙여넣는 것과 같습니다. 우리 중 많은 사람들이 각 줄이 실행될 때 명령 프롬프트가 어떻게 "비동기적으로" 나타나는지 보았습니다:
stdin
숨기고(아마도 차단) 입력(또는 출력)을 표시하지 않고 실행하는 명령이나 트릭이 있습니까?비밀번호를 입력하는 것과 같습니다.
위의 사항에 대해 판단하지 마세요. :-( 무언가를 사전에 거부합니다.
나는
csh
사용하기로 선택하지 않을 것입니다. 예, 상위 10개 항목을 읽었습니다.나는 모두 동일한 네트워크 공유를 마운트하지 않는 수백 대의 서버를 사용합니다
/home
. 그래서 위의 키보드 매크로가 내가 있는 모든 것을 찾아 로드할 수 있도록rsync
"메인 서버"를.cshrc
각각의 다른 네트워크 공유에 푸시하는 위치를 사용합니다..vimrc
어디에서나 찾을 수 있습니다.
고쳐 쓰다
추가해봤는데 stty -echo
,즉
^`::
SendInput stty -echo{ENTER}
SendInput set c=".cshrc-acheong"{ENTER}
SendInput set v=".vimrc-acheong"{ENTER}
SendInput foreach d ( /home/acheong /home/tcama /userhome/andrew.cheong ){ENTER}
SendInput if ( -e $d/$c ) source $d/$c{ENTER}
SendInput if ( -e $d/$v ) alias vim "vim -N -u $d/$v"{ENTER}
SendInput end{ENTER}
SendInput stty echo{ENTER}
return
그러나 프롬프트는 계속 나타납니다.
(설정을 해제하려고 생각했지만 내가 한 일 중 하나 가 교체였기 $prompt
때문에 원하지 않았습니다 .).cshrc
$prompt
답변1
저는 AutoHotKey에 익숙하지 않으므로 거기에서 해결책을 찾지 못했다면 계속 읽으십시오.
POSIX 지정read
명령, 를 사용하여 한 줄의 입력을 허용하는 동시에 터미널 에코(입력할 때 표시되는 내용)를 억제합니다 -s
. 이는 bash에도 내장되어 있지만 시스템에서 독립 실행형으로 존재하는지 확인할 수 있습니다.
그렇지 않으면,이봐stty
, (또 다른 독립 실행형) csh를 사용하여 동일한 작업을 수행할 수 있습니다.
stty -echo # turn echo off
# do your input
stty echo # turn echo back on
답변2
대체 화면 버퍼를 사용하면 원하는 효과에 매우 근접하게 얻을 수 있습니다.
최대(모두?)터미널 에뮬레이터에는 전환할 수 있는 화면 버퍼가 2개 있습니다. 따라서 대체 화면 버퍼로 전환하고 명령을 실행한 다음 다시 기본 화면 버퍼로 전환합니다.
명령 전에 다음을 실행하십시오.
tput smcup
마지막으로 실행
tput rmcup
그러나 여전히 tput smcup
화면에 명령이 표시됩니다.
명령을 숨기기 위해 제가 생각할 수 있는 유일한 방법은 명령에 키 바인딩을 추가하는 것입니다(예: ESC+ t). 나는 zsh
그것이 이루어질 수 있다는 것을 알고 있지만, 나는 모른다 csh
.
해당 명령이 없으면 tput
원래 이스케이프 코드를 에코할 수 있습니다.
Putty의 경우 다음과 같습니다.
echo -e '\e[?47h'
그리고
echo -e '\e[2J\e[?47l'
답변3
퍼티 터미널에 붙여넣는 것에 의존하기보다는 두 시스템 간에 mkfifo
양방향으로 작성해야 합니다. |pipe
그러나 퍼티를 사용해야 한다면 설정에서 흐름 제어를 끄고 stty raw
호스트 측에서 원시 모드를 사용해야 하며 퍼티 설정에서 원시 터미널 옵션을 찾아야 합니다.