Chcę napisać skrypt foo
, który po prostu wywołuje bar
z dokładnie tymi samymi argumentami, z którymi został wywołany, używając Basha lub Perla.Jak mogę uzyskać niezmodyfikowane argumenty wiersza poleceń, aby "zawinąć" inne narzędzie wiersza poleceń?
Teraz, po prostu sposób, aby zrobić to w Perl byłoby
#!/bin/perl
my $args=join(' ', @ARGV);
`bar $args`;
Jednak wartości w ARGV zostały już przetworzone przez powłokę, więc jeśli zadzwonię
foo "I wonder, \"does this work\""
bar będzie nazywaj się w ten sposób:
W jaki sposób mogę uzyskać oryginalny wiersz poleceń, aby móc go po prostu przekazać dosłownie?
Jedną z rozważań jest oczywiście to, że wartość zwracana z
system()
jest wartością zwracaną z wykonania programu, a nie wyjściem z programu. Konieczne może być przekierowanie danych wyjściowych do pliku i odczytanie pliku, jeśli próbujesz zebrać dane wyjściowe. – atk@atk: w takim przypadku można użyć uchwytu procesu. – Ether
Nie, w takim przypadku użyjesz IPC :: Run lub IPC :: Cmd – ysth