공백이있는 쉘 인수 사이에 "{}"문자를 없애려고합니다. 예 :linux shell arguments를 이스케이프 처리합니다.
./cod4_start.sh 안녕하세요 28960 내가 두 번 인용 쉘은 {공백 HOSTNAME}으로 호스트 이름을보고, 비록 인수로 "공백 HOSTNAME"를 통과하면"공백 HOSTNAME"
.
내 변수에 {} 문자가 없도록 스크립트에 전달하는 다른 인수가 있습니까?
set hostname [lindex $argv 5]
그렇지 않으면 lrange
한 요소와 문자열로 구성하여 목록을 반환합니다 : 난 당신이 스크립트에서 lindex
대신 lrange
를 사용해야합니다 생각
#!/usr/bin/expect -f
set pssword [lrange $argv 0 0]
set port [lrange $argv 1 1]
set mod [lrange $argv 2 2]
set map [lrange $argv 3 3]
set num [lrange $argv 4 4]
set hostname [lrange $argv 5 5]
set rcon [lrange $argv 6 6]
set password [lrange $argv 7 7]
set gtype [lrange $argv 8 8]
set slots [lrange $argv 9 9]
spawn su - kod -c cd cod4 -c "nohup ./cod4_lnxded +set s_num=$num +set net_port $port +set dedicated 2 +set fs_game mods/$mod +set logfile 0 +set sv_punkbuster 1 +set sv_hostname \'$hostname\' +exec fastdl.cfg +set rcon_password $rcon +set g_password '$password' +set promod_mode match_mr10 +set g_gametype $gtype +set sv_maxclients $slots +set ui_maxclients $slots +map $map" > /dev/null 2>&1 &
expect "Password:" { send "$pssword\r" }
expect "# " { send "q" }
exit
또는 사용'lassign' (또는 여러 변수와 이전의 foreach 트릭) :
다음은 데이터를 가져 오는 또 다른 방법입니다. – schlenk
@schlenk : 네 - 네 말이 맞아. 나는이 두 변종을 추가했다. – bmk
@bmk +1 내 대답보다 좋네요! – TrojanName