Зачем запускать cat | bash перед копированием / вставкой в ​​терминал? - PullRequest
0 голосов
/ 24 января 2020

Я видел, как кто-то запускал cat|bash перед вставкой команд из буфера обмена в терминал.

bash выполняет команды в bash Я не знаю, почему мы нужно cat здесь и |(pipe).

Какие полезные эффекты имеет эта практика?

Ответы [ 3 ]

3 голосов
/ 24 января 2020

Это был мой коллега, который выполнил кучу команд в терминале, [...] он выполнил cat|bash перед вставкой этого набора команд

Он, вероятно, это остановит Bash интерпретировать что-либо в командах как редактирование ввода, переопределять любые специальные сочетания клавиш и псевдонимы, которые он настроил, и / или предотвращать использование команд потоком команд в качестве ввода.

Рассмотрим эту команду с двумя встроенными символами табуляции:

    if true
    then
        echo "yup"
    fi

Вот что происходит, когда вы вставляете ее в оболочку (поскольку символы табуляции вызывают завершение табуляции при интерактивном вводе):

$ if true
> then
>
Display all 2600 possibilities? (y or n)
!                                   grub-mkfont                         pnmmontage
./                                  grub-mkimage                        pnmnlfilt
:                                   grub-mklayout                       pnmnoraw

А вот фрагмент кода, который включает ssh:

ssh localhost uptime
echo "Finished"

Когда вы вставляете его в оболочку, вторая команда получает в качестве ввода ssh, так что вы получите следующее:

$ ssh localhost uptime
 09:53:40 up 28 days, 18:33, 25 users,  load average: 0.06, 0.01, 0.00

В обоих случаях вставка вместо cat | bash вызовет выполнение команд как есть.

1 голос
/ 24 января 2020

Это читает команды из терминала и выполняет их в bash. Это похоже на простой запуск bash, за исключением того, что когда стандартный ввод bash является терминалом, он по умолчанию работает в интерактивном режиме - он отображает подсказки, выполняет редактирование ввода, включает псевдонимы, выполняет управление заданиями и т. Д. c , Это будет выполняться не в интерактивном режиме, поэтому он будет просто выполнять команды, как если бы они были в сценарии.

Я не уверен , почему кто-то захочет это сделать.

0 голосов
/ 25 января 2020

В дополнение к другим хорошим ответам, данным здесь (завершение табуляции, ssh / ptty), cat | bash не позволит вставленным командам изменить среду оболочки current .

Например, если команды copy-n-paste'd:

PATH=/some/place/odd:$PATH
somecommand some args

PATH не изменяется после выхода из оболочки в cat | bash после выполнения некоторой команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...