私は空白を含むシェル引数の間に "{}"文字を取り除こうとしています。例えば:Linuxシェルの引数をエスケープする
./cod4_start.shこんにちは28960私はそれが二重引用符で囲まれたシェルは、{スペースでHOSTNAME}としてホスト名を見ていていても、引数として "SPACES WITH HOSTNAME" を渡したら"SPACES WITH HOSTNAME"
。
私の変数に{}文字が含まれないように、スクリプトに渡す引数はありますか?ここで
はコードです:
#!/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:はい - そうです。私はこれら2つのバリエーションを追加しました。 – bmk
@bmk +1私の答えよりいい! – TrojanName