Избейте сценарий (установите-x), режим не отображает то, что делает команда “кошки”. (содержание его)

[1176177] На a, попробуйте [1176615]ssh other_user@localhost[1176616]. В теории, которая должна переслать ваше соединение ssh-agent снова, позволяя другому_пользователю использовать его. Однако это все равно не сработает с [1176617]/bin/false[1176618] как с оболочкой другого_пользователя.

Я не думаю, что без привилегий root можно обойти эту ограниченную оболочку (и не следует ее использовать).

Из [1176619]man su[1176620]:

Если у целевого пользователя ограниченная оболочка (т.е. поле оболочки этого пользователя в /etc/passwd не указано в /etc/shells), то опция --shell или переменная окружения $SHELL не будут учитываться, если только su не вызывается root.

1
30.08.2014, 02:54
3 ответа

Попробуйте использовать набор -v вместо набора -x

3
27.01.2020, 23:15

Это происходит потому, что set -x отображает оценку расширений - что не является фактором для типичных перенаправлений.

LC_ALL=C man set |
sed -n '/^ *-x/,/^$/p'

   -x    The  shell  shall  write  to standard error a
         trace for each command after it  expands  the
         command  and  before  it  executes  it. It is
         unspecified whether the  command  that  turns
         tracing off is traced.

Из спецификации POSIX

Операторы перенаправления << и << - позволяют перенаправлять строки, содержащиеся во входном файле оболочки, известном как здесь-документ для ввода команды.

Эти данные получает cat , а не оболочка. Таким образом, нет расширения , о котором он мог бы сообщить перед выполнением. И после того, как он передал этот бит своего ввода, действительно нет данных, по которым он все равно мог бы сообщить.

Вот почему - как рекомендовано в другом месте set -v действительно работает, тогда как -x не работает:

LC_ALL=C man set |
sed -n '/^ *-v/,/^$/p'

   -v    The shell shall write its input  to  standard
         error as it is read.

В этом случае он дублирует свой ввод в stderr во время чтения - до перенаправления - независимо от того, расширяет он его или нет.

2
27.01.2020, 23:15

В оболочке нет функций, поддерживающих это. Вы можете достичь этого конкретного результата, выполнив

tee /test << "EOF"
a
b
c
d
EOF

, но это не так просто адаптировать ко всему, что вы могли бы сделать в сценарии оболочки.

Возможно, вы захотите изучить такие программы, как screen и Expect .

1
27.01.2020, 23:15

Теги

Похожие вопросы