다음을 여러번 반복해야 해서 자동화하고 싶습니다.
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 인스턴스) 을 제외하고 ~/.cshrc
tcsh 세션 시작 시 실행될 스크립트를 전달할 수 없습니다. 일부 초기 명령을 실행하려면 해당 명령을 입력하세요 ~/.cshrc
(아마도 조건부 구성 내부에). 또는 프로그램 실행, 환경 변수 설정, 현재 디렉터리 변경 등의 명령의 경우 아래와 같이 래퍼 스크립트를 사용할 수 있습니다. 이는 셸 환경 변경에는 작동하지 않습니다(예: csh 변수 설정에 사용). ) set
.
#!/bin/tcsh
# commands go here
cd $workdir
setenv foo bar
exec tcsh