쉘 스크립트에서 사용하기 위해 Perl에서 대소 문자를 구분하는 Windows 환경 변수를 설정하려고합니다.
그러나 Perl에서 system
명령 을 사용하여 호출 한 쉘 스크립트에서 소문자로 사용하고 Msys로 실행 하려고 할 때 환경 변수가 모두 대문자 임을 알았습니다.
예를 들어, 다음 스크립트 :
#!perl
system "echo echo TOTO=\$TOTO > toto.sh";
system "echo echo Titi=\$Titi >> toto.sh";
system "echo echo TITI=\$TITI >> toto.sh";
$ENV{'TOTO'}="0+0";
$ENV{'Titi'}="Not toto!";
system("sh toto.sh");
(Msys에서 실행되는 동안) 다음 출력을 반환합니다.
TOTO=0+0
Titi=
TITI=Not toto!
Windows에서 이것이 가능한지 아는 사람이 있습니까 (예 : 환경 변수를 설정 Titi
하지 않고 설정하는 방법 TITI
)?
감사
할 수없는 것처럼 보였습니다. Windows는 대문자 변수 만 사용합니다.
내가 한 방법은 변수를 대문자로 대체하여 스크립트를 일시적으로 변환하고 사용 후 이전 상태로 다시 전환하는 것입니다.
제 경우에는 쉘 스크립트에서 내 보낸 변수를 처리해야했습니다 Run_Session.sh
. 대문자 바꾸기를 수행하기 위해 Perl 스크립트를 만들었으며 이것이 결과입니다.
###############################
## SUBROUTINE uc_variables ##
#-----------------------------#
# This subroutine convert the environment variables exported
# by the top level script to upper case, and can revert the operation.
#
# Input:
# -----
# $mode: "ON" (default) or "OFF"
#
# Output:
# ------
# N/A
#-----------------------#
#########################
sub uc_variables {
my $mode=shift;
chdir $Bin;
if ($mode eq "OFF") {
foreach my $bak (glob "{*,*/*}.sh.bak") {
(my $orig = $bak)=~s/\.bak//;
move($bak,$orig);
}
} else {
#Check if back-up already exists
uc_variables("OFF") if (-e "Run_Session.sh.bak");
#List variables to update
my %uc_var;
open RUN_SESSION,"<Run_Session.sh" or die "Error while reading Run_Session.sh ($!)\n";
map { /export\s+(\w*[a-z]\w*)/ and ($uc_var{$1}=uc($1))=~s/Directory/DIR/i } <RUN_SESSION>;
close RUN_SESSION;
#Replace variables
foreach my $shell (glob "{*,*/*}.sh") {
#Back-up
copy($shell,"$shell.bak");
#Read data
open SHELL,"<$shell" or die "Error while reading $shell ($!)\n";
my $SHELL = join("", <SHELL>);
close SHELL;
#Replace
map { $SHELL=~s/$_/$uc_var{$_}/g } keys %uc_var;
#Print
open SHELL,">$shell" or die "Error while writing in $shell ($!)\n";
print SHELL $SHELL;
close SHELL;
}
}
} #end of uc_variables
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다