2010-12-31 17 views
7

Diğer şeylerin yanı sıra, tüm argümanlarını başka bir programa aktarmadan bash komut dosyası yazmam gerekiyor.

Minimal örnek:

 
$ cat >proxy.sh 
#!/bin/bash 

./script.sh [email protected] 
^D 

$ chmod +x proxy.sh 

$ cat >script.sh 
#!/bin/bash 

echo one $1 
echo two $2 
echo three $3 
^D 

$ chmod +x script.sh 

Bu naif yaklaşım boşluklarla bağımsız değişkenler için çalışmaz: Beklenen

 
$ ./proxy.sh "a b" c 
one a 
two b 
three c 

: Ben bunun için proxy.sh yazmak gerekenler

 
$ ./proxy.sh "a b" c 
one a b 
two c 
three 

olmak?

Takma ad kullanamayacağımı unutmayın, proxy.sh bir betik olmalıdır - script.sh'u çağırmadan önce bazı şeyler yapar. o "[email protected]" yapma

+1

- bu bir yazım hatası mı? Ne demek istedin? – Mehrdad

+0

"... tüm argümanlarını * içermeli * ..." Sabit, üzgünüm. –

cevap

11

Alıntı [email protected]:

$ cat >proxy.sh 
#!/bin/bash 

./script.sh "[email protected]" 
^D 

Sonra orijinal tırnak korur: "... başka bir programa bozulmamış tüm argümanları gereken"

one a b 
two c 
three 
+0

Çalışır, teşekkürler. Bunu beklemiyordum, bunun tüm argümanları bir birine yapıştırdığını düşündüm ... Bash sözdizimini okumaya ihtiyacım var sanırım. –

+5

Bu doğru. '$ @' her zaman alıntılanmalı ya da istediğinizi yapmaz (genellikle bir hata olan '$' 'ile aynıdır). – psmears

+3

Ayrıca, boşlukları içinde tutmak istiyorsanız, diğer tüm değişkenleri "çift tırnak" içine almanız gerekir. Birkaç nadir durumda hariç, her zaman "$ var" yerine "$ var" yazın. –