Использование канала в псевдониме bash

У меня нет опыта написания сценариев оболочки, поэтому я не вижу проблемы в следующей ситуации:

Я определил псевдоним следующей формы (file.c находится в ~/dir):

alias code="cd ~/dir | vim file.c"

При его вводе я получаю следующее предупреждение, а нужные файлы не открываются:

Vim: Warning: Input is not from a terminal
2 files to edit

Я думал, что оператор канала в этом случае разделит две команды, сначала изменив каталог, а затем открыв файл.


person octavian    schedule 08.03.2014    source источник
comment
Возможно, это поможет stackoverflow.com/questions/3852616/   -  person Rafa Paez    schedule 08.03.2014


Ответы (3)


Поскольку вы упомянули, что у вас нет опыта работы с оболочкой, я буду подробным.

Проблема в том, что вы неправильно используете трубку.

cmd1 | cmd2

Означает перенаправление вывода cmd1 на ввод cmd2. Возможно, вы путаете его с оператором OR ||, который можно использовать как:

cmd1 || cmd2

«Если cmd1 не работает, выполните cmd2». Однако в вашем случае это не поможет. Оба предыдущих ответа работают для вас:

alias code="cd ~/dir; vim file.c"

Использование точки с запятой, которая представляет собой простой разделитель команд. Или мой личный фаворит

alias code="cd ~/dir && vim file.c"

В котором используется оператор AND.

cmd1 && cmd2

означает «выполнить cmd1. Если это успешно, продолжайте с cmd2. В противном случае - остановитесь».

person davir    schedule 08.03.2014
comment
возможно, пользователь имел в виду неправильный вариант использования, но все же было бы неплохо, если бы вы ответили на заданный вопрос, возможно, предоставив пример псевдонима bash с командой канала в нем. - person Maddocks; 24.03.2021

Лучшим псевдонимом было бы:

alias code="cd ~/dir && vim file.c && cd -"

Это гарантирует, что вы не откроете файл в текущем каталоге в случае сбоя cd и вернетесь в старый каталог, где вы были.

person P.P    schedule 08.03.2014

Тебе не нужна труба. Используйте точку с запятой в качестве разделителя команд.

alias code="cd ~/dir; vim file.c"

Вы также можете использовать pushd и popd в качестве псевдонима, чтобы вернуться в предыдущий каталог.

person P̲̳x͓L̳    schedule 08.03.2014