UnixWare 7은 Linux에 변수를 전달할 수 없습니다.

UnixWare 7은 Linux에 변수를 전달할 수 없습니다.

저는 Bash를 처음 접했고 해결하기 정말 어렵지만 일부에게는 쉬울 수도 있는 문제에 직면했습니다.

저는 SSH가 없고 RSH만 사용할 수 있는 아주 오래된 SCO UnixWare 7 시스템을 가지고 있습니다. SCO는 더 이상 존재하지 않으며 파산했다고 생각합니다. 약 15년 ​​동안 이 박스를 사용했는데 한번도 문제가 발생하지 않았습니다. 우리는 여름에 이 플랫폼을 떠날 예정이지만 지금은 Linux 시스템 중 하나에 일부 파일을 복사해야 하며 매우 짧은 스크립트를 작성하려고 합니다. 이 환경에서는 보안이 중요하지 않으므로 RSH가 안전하지 않다고 말하지 마십시오. UnixWare 상자와 CentOS 6을 실행하는 두 개의 다른 Linux 상자는 주차장의 여러 장애물을 관리하기 위해 3명이 전용으로 사용하며 인터넷이나 다른 네트워크에 연결되어 있지 않습니다. 4포트 독립형 스위치에 연결된 서버 3대만, 다른 연결은 없음

질문

CentOS 6을 실행하는 Linux1의 Unixware 서버에서 이 명령을 실행하여 형식화된 데이터로 변수를 설정하고 내용을 표시했습니다.

rsh Linux1 "TEST=$(date --date='-9day' +%A_%B-%d_Backup); echo \$TEST" 

이 오류가 발생합니다.

# rsh Linux "TEST=$(date --date='-9day' +%A_%B-%d_Backup); echo \$TEST"
UX:date: ERROR: Illegal option -- -
UX:date: ERROR: Incorrect usage
UX:date: TO FIX: Usage:
        date [-u] [+format]
        date [-u] [[mmdd]HHMM | mmddHHMM[[cc]yy]]
        date [-a [-]sss.fff]

CentOS 6을 실행하는 Linux2로 이동하여 Linux1에 대해 동일한 명령을 실행하면 오류가 발생하지 않습니다.

[Linux2 ~]# rsh Linux1 "TEST=$(date --date='-9day' +%A_%B-%d_Backup); echo \$TEST"
Wednesday_January-14_Backup

UnixWare 서버에서 실행할 때 이 명령이 작동하지 않는 이유는 무엇입니까? Unixware는 처리를 위해 문자열을 Linux1에 전달하지 않고 대신 로컬로 처리하려고 시도하는 것 같습니다( --date고대 Unixware 상자에는 옵션이 없었으므로 오류가 발생했습니다).

답변1

이는 실제로 UnixWare, Bash 또는 RSH 관련 문제가 아닙니다. 이는 date원격 시스템과 동일한 구현이 없는 모든 시스템에 영향을 미치는 참조 문제입니다 . 예를 들어 Bash를 실행하는 Mac에서 Linux 시스템으로 SSH를 연결할 때에도 이런 일이 발생할 수 있습니다.

date로컬 시스템 대신 원격 시스템을 실행하려면 다음과 같이 참조를 조정하십시오.

# rsh Linux1 'TEST=$(date --date=-9day +%A_%B-%d_Backup); echo $TEST'

이 방법으로 일부 내부 인용 및 이스케이프를 건너뛸 수도 있습니다.

관련 정보