Как регистрировать запросы в / из `exec` - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть git ловушка предварительного получения на моем сервере GitLab-CE:

#!/bin/sh

# This is the single source of truth for where Gitaly's embedded Git hooks are.
exec "$GITALY_BIN_DIR/gitaly-hooks" "$(basename $0)" "$@"

Я очень заинтересован в том, что проходит через эту команду exe c, потому что это " не работает ".

Как записать ввод и вывод в команду exec и записать ее в файл или файлы? Спасибо!

Это предназначено для вывода, но имеет syntax error: redirection unexpected. Я также хочу войти вход.

exec "$GITALY_BIN_DIR/gitaly-hooks" "$(basename $0)" "$@"  &> >(tee -a /var/log/git-as-svn/pre-receive.2.3.log)

1 Ответ

1 голос
/ 14 апреля 2020

См. https://docs.gitlab.com/ee/administration/server_hooks.html особенно Пользовательские сообщения об ошибках

См. Также Лучший способ отладки git -hooks

Вы можете изменить первую строку с #!/bin/sh на #!/bin/sh -x.

Или вы можете записать значение $ @ в файл, как предложил user1934428.


Я извините, я недостаточно внимательно прочитал вопрос. Как насчет использования strace, тогда вы можете увидеть, что было входом и выходом?

Например:

$ cat test.sh                                                                                                                          #!/bin/sh

/usr/bin/strace -f -o /tmp/strace.out -s 9999 /bin/bash -c "exec ./hello.sh"
$ cat hello.sh                                                                                                                         #!/bin/sh
echo What is your name?
read name
echo hello $name
$ ./test.sh                                                                                                                            What is your name?
John
hello John
$ grep read\(0 /tmp/strace.out                                                                                                         
104   read(0, "J", 1)                   = 1
104   read(0, "o", 1)                   = 1
104   read(0, "h", 1)                   = 1
104   read(0, "n", 1)                   = 1
104   read(0, "\n", 1)                  = 1
$ grep write\( /tmp/strace.out                                                                                                         
104   write(1, "What is your name?\n", 19) = 19
104   write(1, "hello John\n", 11)      = 11
$                                
...