2017-09-08 4 views
0

J'essaye d'analyser l'adresse IP de la commande ifconfig. Cela fonctionne bien quand je le fais sur la ligne de commandeAttendez script: analyser l'adresse IP de ifconfig

[email protected]:~/devtest/ngs/base/Tests/shellScripts$ ifconfig enp0s3 | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p' 
192.168.1.112 

Mais cela donne une erreur quand je l'utilise dans un script attendu.

#!/usr/bin/expect 

set pidBash [ spawn bash ] 

set ipIfConfig {ifconfig enp0s3 | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p'} 
set clientIP [exec "echo $ipIfConfig"] 
puts "clientIP = $clientIP" 
exit 1 

La sortie est

[email protected]:~/devtest/ngs/base/Tests/shellScripts$ ./ifconfig_parse.sh 
spawn bash 
couldn't execute "echo ifconfig enp0s3 | sed -n '/inet addr/s/.*addr.\([^ ]*\) .*/\1/p'": no such file or directory 
    while executing 
"exec "echo $ipIfConfig"" 
    invoked from within 
"set clientIP [exec "echo $ipIfConfig"]" 
    (file "./ifconfig_parse.sh" line 7) 
+0

Est-ce que [cette question] (https://stackoverflow.com/questions/5281341/get-local-network-interface-addresses-using-only-proc) aide? – tadman

+0

Essayez "bash ifconfig_parse.sh" –

Répondre

1

Essayez comme ceci:

set ip [exec ifconfig enp0s3 | sed -n {/inet addr/s/.*addr.\([^ ]*\) .*/\1/p}] 
puts ip=$ip 

Voir Command substitution et exec dans le manuel d » Tcl.

+0

Vous devez expliquer pourquoi, guillemets simples vs accolades. –

+0

@whjm Merci. Avoir à faire attention quand utiliser des guillemets ou des accolades. J'ai pu aussi extraire l'adresse IP sans utiliser 'sed' en utilisant ceci: if {[regexp {inet addr: (\ S +)} [exec ifconfig enp0s3] -> clientIP]} {met "clientIP = $ clientIP"} –