2010-03-24 18 views
9

Gcc veya ls gibi komutlar için argümanları dosyadan komut satırı argümanları olarak kullanmak isterim. gcc komut satırı çağrı için kullanılırDosya içerikleri komut satırı argümanları olarak nasıl kullanılır?

-o çıktı -Wall -Werro

: Örneğin dosyası olarak gcc -o output -Wall -Werro

için

oluşmaktadır.

cat optionsfile | xargs gcc 

Edit:

+6

'gcc $ içerebilir böylece bu iç içe geçebilir seçenekleri

-ansi -I/usr/include/mylib 

içeren @argfile (kedi filename.txt) '- İhtiyaç duyulabilir. –

cevap

11

Sen xargs kullanabilirsiniz ben downvoted oldum Laurent xargs eser, işte kanıtı bilmiyor çünkü:

$ echo "-o output -Wall -Werro" > optionsfile 
$ cat optionsfile | xargs -t gcc 
gcc -o output -Wall -Werro 
i686-apple-darwin10-gcc-4.2.1: no input files 

-t bayrağı, yürütülmeden önce komutun stderr'a yazılmasına neden olur. Ben kediyle birlikte $() kullanılması önerilir

gcc $(<file) 
+1

@Laurent, bu tamamen yanlıştır. Yazdığım komut gcc -o çıkışı -Wall -Werro'yu çalıştırır. İnanmıyorsan kendini dene. –

+0

Çok kötü Bir yorum yapamam. –

+4

Veya "xargs gcc Sean

8
gcc `cat file.with.options` 
+1

Bunlar, tek tırnak değil, backtick'tir. – tomfanning

3

:

gcc $(cat file) 

güzel bir şey ters tırnakların üzerinde yaklaşık $() (klasik yön) başka dahilinde yuva bir daha kolay olmasıdır :

gcc $(cat $(cat filename)) 
4

bash ile

+0

+1, yuvalama backticks bir acıdır. –

+0

'$() 'sözdizimini anlamak için yeteri kadar modern bir şey de, dosyanın kendisini nasıl açacağını ve yönlendireceğini, işe yaramaz bir“ kedi ”sürecine olan ihtiyacı ortadan kaldırdığını bilir. Örneğin, gcc $ (

2

Çoğu zaman, komut alt (diğerlerinin de işaret ettiği gibi backticks veya $() aracılığıyla) belirtim iyidir, ancak kabuk genişleme kurallarına dikkat edin. Özellikle, unpoting'in'dan önce yapılıp, komutunun ikamesinin değiştirilmesinden sonra kelime bölme işlemi yapılır. Tüm argümanlar kelimeler ise

Bu çok kötü değil ama boşluk veya normalde argümanları içine alıntı gerekecektir diğer özel karakterleri koyarak başlamak , o zaman anormal fark (garip sonuçlarla araya gelebilirler yılında aralık ve tırnak çıkış):

$ echo "foo 'bar baz'" >a 
$ echo $(cat a) 
foo 'bar baz' 

bütün komuta ikameci aktaran bu nedenle (kelime bölme önleyecek senin tüm dosyanın içeriği tek bir uzun argüman olarak yerine göründüğü şekilde, belli ki çözüm, değil birçok seçenekleri) ve tırnak hakkında hiçbir şey yapmazdım. Bu çevrede

$ echo "$(cat a)" 
foo 'bar baz' 

bir çözüm eval yerleşiğini kullanmaktır:

$ eval echo "$(cat a)" 
foo bar baz 

burada en iyi örnek komut olmayabilir N.B .: yankı; 'u başka bir şeyle değiştirmek isteyebilirsiniz, ör.Aşağıdaki fonksiyonu:

$ f() { echo $#; } 
15

Bazı programlar bir dosyadan örn gelen args içinde beslemek için "@" anlambilim kullanın. gcc

, gcc için, argfile o argfile

-ansi 
-I/usr/include/mylib 
@argfile2 

http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Overall-Options.html#Overall-Options

+0

+1 Bunun yapılmasının kanonik yolu olduğunu görüyoruz. Çok kötü [UUOCs] (http://partmaps.org/era/unix/award.html#uuk9letter) kazandı;) – l0b0

+0

Katılıyorum - bu gcc ile bunu yapmanın en iyi yoludur. Bence xargs çözümü bence. Herhangi bir programla çalışmanın ekstra avantajı vardır. –

+0

Bu ayrıca, cmd.exe dosyasında 8196 karakter aralığı sınırını aşma avantajına da sahiptir. – lama12345

İlgili konular