LINUX.ORG.RU

что-то не так с передачей аргументов программе


0

1

привет.

в такой('sudo -u unregistered time ./program -v') командной строке, я ожидал, что опция '-v' будет передана программе './program', но получается так, что она передается программе time.

подскажите, почему так?

благодарен.

★★★

Уверены, что дело не в разнице builtin time и /usr/bin/time?

$ /usr/bin/time echo 

0.00user 0.00system 0:00.01elapsed 0%CPU (0avgtext+0avgdata 520maxresident)k
24inputs+0outputs (1major+179minor)pagefaults 0swaps
$ time echo


real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ time -v echo
bash: -v: команда не найдена

real 0m0.010s
user 0m0.000s
sys 0m0.000s
$ /usr/bin/time -v echo

Command being timed: «echo»
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: ?%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 524
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 183
Voluntary context switches: 1
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
$ /usr/bin/time echo -v
-v
0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 536maxresident)k
0inputs+0outputs (0major+184minor)pagefaults 0swaps

AITap ★★★★★
()
Ответ на: комментарий от AITap

нет, причина не в builtin time.

эти две команды дают тот же результат:

1)sudo -u unregistered time echo -v

2)sudo -u unregistered /usr/bin/time echo -v

т.е. непонятно почему, '-v' передается как аргумент для time %)

niXman ★★★
() автор топика
Ответ на: комментарий от beastie

потому что если '-v' не указывать, time не использует verbose режим.

к тому же, выше уже и результаты есть, и сравнения.

niXman ★★★
() автор топика
Ответ на: комментарий от beastie

стоп!

прочитав первый ответ, я подумал, что time и /usr/bin/time работают по разному. но сейчас, проверив оба варианта(без '-v') которые я привел в ответе на первый ответ, я понял, что они обе выводят одно и то же. (убунта 12.10)

что-то я совсем запутался %)

давайте сначала.

на самом деле, в топике описана упрощенная проблема. думал, таким образом не придется читающим заморачиваться на ненужном.

реально же, проблема с такой командой: sudo -u unregistered -s systrace [args...] program -v

systrace мне говорит, что он ничего не знает про '-v'. или это в systrace проблема?

niXman ★★★
() автор топика
Ответ на: комментарий от beastie

первая команда:

# sudo -u unregistered time echo -v

вывод:

-v 0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 596maxresident)k 0inputs+0outputs (0major+193minor)pagefaults 0swaps

вторая команда:

# sudo -u unregistered /usr/bin/time echo -v

вывод:

-v 0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 596maxresident)k 0inputs+0outputs (0major+193minor)pagefaults 0swaps

niXman ★★★
() автор топика
Ответ на: комментарий от niXman

Это потому, что для sudo не существует bash builtin, и он оба раза запускает $(which time) = /usr/bin/time.
Сравните с sudo -u unregistered bash -c 'time echo -v'

Кроме того, большинство программ, использующих GNU getopt, прекращают разбор опций после параметра "--". Попробуйте указывать его перед самой внутренней командой.

AITap ★★★★★
()
Ответ на: комментарий от niXman

Скорей всего это тебе поможет:

sudo -u unregistered -s systrace [args...] -- program -v

beastie ★★★★★
()
Ответ на: комментарий от AITap

большинство программ, использующих GNU getopt, прекращают разбор опций после параметра "--".

да, это решило проблему. я не знал о таком правиле.

спасибо большое, вопрос закрыт.

niXman ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.