Übergeben Sie Argumente von csh an das Programm, genau so, wie sie sind

8

Ich habe ein csh-Skript, das mit "source" ausgeführt wird, und übergibt alle Argumente an ein Programm:

%Vor%

Wenn ich source foo.csh a b c starte, ist alles in Ordnung. Aber nicht immer:

  1. foo "a b" "c d" :
    Ich erwarte, dass bar zwei Argumente erhält - a b und c d . Stattdessen wird es 4.

  2. foo a "*" b : Das * wird zu einer Liste von Dateien erweitert. Ich möchte nur das Zeichen * .
    Extra Credit - foo a * b sollte genauso funktionieren. Ich weiß, es ist problematischer und ich bin bereit, ohne es zu leben.

Eine Sache, die ich ausprobiert habe, ist ./bar $* in ./bar "$*" zu ändern. Dies hilft mit dem Stern, aber jetzt bar bekommt immer alles in einem einzigen Parameter.

Anmerkungen:

  1. Unsere Firma verwendet csh als Login-Shell, also muss ich sie verwenden, wenn Sie source verwenden. Zu wissen, dass csh-Programmierung als schädlich angesehen wird , habe ich alle Logik in bar und implementiert hat das absolute Minimum im Skript gelassen.

  2. Wenn Sie vorschlagen, den Alias ​​neu zu definieren, ist es wichtig zu sehen, dass die Umleitung immer noch funktioniert ( foo | grep hello ) und dass es eine saubere Säuberung gibt, wenn ctrl-C das Skript bricht.

Danke.

    
ugoren 09.06.2013, 09:15
quelle

1 Antwort

14

Inzwischen habe ich die Antwort selbst gefunden:

./bar $argv:q

Der Modifikator :q kümmert sich um Dinge. Es übergibt an bar die exakt gleichen Parameter foo get.

Quelle: Ссылка

    
ugoren 09.06.2013 11:13
quelle

Tags und Links