Как делают перенаправление в, символы работают в последовательности?

Из сообщений об ошибках Вы используете (t) csh. Это помогло бы упомянуть это в Вашем вопросе, тем более, что Вы показываете $ как Ваша подсказка, и это - традиционно подсказка Bourne, не подсказка csh.

type встроенное в оболочке стиля Границы. Это не существует в csh. Когда Вы работаете type git, это говорит Вам что type команда не найдена.

Много оболочек хранят информацию о местоположении команд в пути поиска в кэше. Я не знаю, кажется ли какая-либо версия csh кэшей отрицательные поиски, но, что Ваш делает. Выполните команду rehash обновить кэш. При запуске нового экземпляра оболочки он имеет новый кэш и так не помнит это git не присутствовал ранее.

7
04.02.2015, 23:59
2 ответа

Перенаправления в ракушках в стиле Bourne / POSIX , такие как Bash , Dash, ksh и т. Д.

, обработанные в том порядке, по которому они появляются, слева направо

> x открывается и усеченные файл x , и устанавливает дескриптор файла, который пишет в x в качестве стандартного вывода. Ваша команда:

cat file1 > file2 > file3

будет:

  1. Открыть и урезанный File2
  2. Установите стандартный вывод, чтобы написать на этот файл дескриптор
  3. Открыть и урезать File3
  4. Установите стандартный вывод, чтобы написать на это Файловый дескриптор
  5. Run CAT File1

Конечный результат заключается в том, что стандартные выходные точки в File3 в то время CAT . Как File2 и и File3 имеют стершение их текущего содержимого, и File3 получает выход CAT (содержимое file1 ) написано в него.


Если вы хотите разделить выход на несколько потоков, записанных в отдельные файлы, вы можете использовать TEE :

cat file1 | tee file2 > file3

Другие оболочки (, особенно ZSH ) Иначе, и ваша команда будет иметь результат, который вы, вероятно, ожидали: как file2 , и file3 будет иметь содержимое file1 .


Обратите внимание, что здесь не нужно ; < Входное перенаправление сделало бы рабочую силу.

14
27.01.2020, 20:14

Когда вы перенаправляете FD несколько раз, все перенаправления выполняются, а последние палочки:

$ strace -f -e open bash -c 'cat file1 > file2 > file3'
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
...
[pid 20508] open("file2", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
[pid 20508] open("file3", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
...
[pid 20508] open("file1", O_RDONLY)     = 3

так, File2 был открыт и усечен, а затем File3 был открыт.

9
27.01.2020, 20:14

Теги

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