표준 출력에서 ​​시작 메시지를 표시하지 않습니까?

표준 출력에서 ​​시작 메시지를 표시하지 않습니까?

나는 사용 중이며 tcsh그룹 파일을 가져와야합니다 .cshrc. 파일은 일부 메시지를 반영하는데, 이는 일반 셸에는 문제가 없지만 scpWindows 및 Linux와 같은 프로그램에서는 문제를 일으킬 수 있습니다 rsync. 솔루션이 여러 형태 중 하나를 취하는 것을 볼 수 있지만 그 중 어떤 것도 구현할 수는 없습니다.

적절한 경우에만 echo를 실행하세요.

rsync및 매뉴얼 페이지를 살펴봤지만 tcshssh/rsync/whatever에서 호출할 때 설정 또는 설정 해제가 보장되는 변수를 찾을 수 없습니다. $PROMPT일반 1과 동일하며 $shlvl나머지는 유망해 보입니다.

표준 오류로 리디렉션

rsync/scp/etc는 stderr에서 무슨 일이 일어나는지 신경 쓰지 않는 것 같습니다. 따라서 가능하다면 그렇게 할 것입니다.

echo $MSG >&2

그러나 이것은 쉘에서도 작동하지 않습니다. 대신 $MSG. 2​기록을 보면 무언가(xterm? readline? tcsh?)가 공백을 삽입한 것 같아서 실제로 실행되는 것은 다음과 같습니다.

echo $MSG > & 2

따라서 관찰된 동작은 tcsh에 대한 실제 입력을 고려하면 의미가 있습니다.

/dev/stderr로 리디렉션

나도 시도했다

echo $MSG > /dev/stderr

이것은 작동 ssh하지만 " " 메시지가 표시되는 scp경우 주요 차이점은 파일 심볼릭 링크의 위치인 것 같습니다. 표시할 cshrc 파일에 추가rsync/dev/stderr: Permission denied.ls -l /dev/stderr /proc/self/fd/2

# For ssh
lrwxrwxrwx 1 root root    15 Apr 11 09:58 /dev/stderr -> /proc/self/fd/2
lrwx------ 1 <me> <mygrp> 64 May 24 14:34 /proc/self/fd/2 -> /dev/pts/6

# For scp
lrwxrwxrwx 1 root root    15 Apr 11 09:58 /dev/stderr -> /proc/self/fd/2
l-wx------ 1 <me> <mygrp> 64 May 24 15:07 /proc/self/fd/2 -> pipe:[378204842]

그러나 권한 거부 메시지가 stderr에 나타나기 때문에 scp/rsync 프로세스가 해당 작업을 수행할 수 있으므로 이 해결 방법을 수락할 수 있지만 이 가짜 오류 메시지는 받고 싶지 않습니다.

답변1

내가 사용하는 관용구는

if ( $?prompt ) then
    # interactive commands here
endif

$prompt대신 소문자로 표기됩니다 $PROMPT.

% echo $prompt
%U%m%u:%B%~%b%#

% ssh localhost 'echo $prompt'
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Password: 
prompt: Undefined variable.

항상 설정되어 있으면 $prompt시작 파일 중 하나가 무조건 설정할 수 있습니다.

if ( $?prompt )또한 테스트 내부에도 들어가야 합니다 .

if ( $?prompt ) then
    set prompt='%B%m%b %C3>'

    # interactive commands here
endif

출력이 터미널인지 테스트하는 것도 가능합니다.

if ({ test -t 0 }) then
    # interactive commands here
endif

관련 정보