스크립트를 통해 쉘을 변경하는 방법은 무엇입니까?

스크립트를 통해 쉘을 변경하는 방법은 무엇입니까?

다음을 여러번 반복해야 해서 자동화하고 싶습니다.

sudo su
tcsh
cd $workDir

이것은 $workDir에 설정되어 있습니다 ~/.tcshrc. 두 개의 쉘 스크립트를 작성해 보았습니다. 스크립트 1은temp.sh

#!/bin/bash
sudo su
./temp.csh

스크립트 2는temp.csh

#!/usr/bin/tcsh
tcsh
cd $workDir

그러나 예상대로 작동하지 않습니다. 즉, cshell 프롬프트가 표시되지 않으며(스크립트가 없는 방법과 달리 여전히 bash 프롬프트에 있음) $workDir에 CD를 넣지 않습니다. 도움/조언이 있나요?

답변1

workDir="/dev/"; sudo su -c tcsh -c "cd $workDir; echo \$PWD"스크립트 중에 폴더를 변경하는 데 사용됩니다 .

모든 것에서 도망치는 것을 기억하세요 $.

편집하다

이렇게 하면 어떨까요:

sudo ./tcsh.csh

tcsh.csh에는 다음이 포함됩니다.

#!/usr/bin/tcsh
cd $workDir  # need to set $workDir somewhere, depends on you
blabla

답변2

당신은 이런 일을 할 수 있습니다(사용여기 - 문서):

tcsh<<EOF
command1
command2
(...)
EOF

답변3

당신이 달릴 때

sudo su
./temp.csh

그러면 루트( )로 대화형 쉘이 실행되고 sudo su, 쉘이 종료되면 csh 스크립트가 실행됩니다. 다시 말하지만, temp.csh스크립트는 먼저 대화형 tcsh를 실행한 다음 종료하기 전에 현재 디렉터리를 변경합니다.

csh 스크립트를 루트로 실행하려면 다음을 실행하십시오.

sudo ./temp.csh

tcsh의 대화형 인스턴스를 루트로 실행하려면(내 생각에는 이것이 당신이 원하는 일이라고 생각합니다) 다음을 실행하십시오.

sudo tcsh

특정 디렉터리에서 tcsh 인스턴스를 실행하려면 sudo를 실행하기 전에 디렉터리를 변경하세요.

cd /path/to/directory && sudo tcsh

많은 설치에서 sudo대부분의 환경이 지워지므로 래퍼 스크립트에 설정된 환경 변수가 tcsh 세션에서 사용 가능할 것으로 기대하지 마십시오.

/etc/csh.login~/.login구성 파일(및 로그인 셸 /etc/csh.cshrc및 모든 tcsh 인스턴스) 을 제외하고 ~/.cshrctcsh 세션 시작 시 실행될 스크립트를 전달할 수 없습니다. 일부 초기 명령을 실행하려면 해당 명령을 입력하세요 ~/.cshrc(아마도 조건부 구성 내부에). 또는 프로그램 실행, 환경 변수 설정, 현재 디렉터리 변경 등의 명령의 경우 아래와 같이 래퍼 스크립트를 사용할 수 있습니다. 이는 셸 환경 변경에는 작동하지 않습니다(예: csh 변수 설정에 사용). ) set.

#!/bin/tcsh
# commands go here
cd $workdir
setenv foo bar
exec tcsh

관련 정보