Правильное использование трубы

Могу предложить вам (если вы в оболочке bash) написать вместо этого функцию

cpToLetter () { cp  "$@" ~/Desktop/letter; }

С помощью одной команды cpToLetter f1.txt вы переместите файл в каталог. Вы можете использовать так же, как и cp (например, cpToLetter *.txt), но вам не нужно писать место назначения, которое фиксировано.

Если вы пропишите функцию в ~/.bashrc, вы позволите любой новой оболочке знать эту функцию автоматически.


Как писать и копировать зависит от оболочки, в которой вы находитесь

В bash и dash (часто sh является символической ссылкой на \bin\dash) можно написать напрямую (без необходимости указывать вручную имя пользователя):

ldir=~/Desktop/letters  
cp myfile $ldir  

В tcsh

setenv ldir ~/Desktop/letters  
cp myfile $ldir  
0
01.04.2019, 19:40
1 ответ

Некоторые приложения понимают -как стандартный ввод (проверьте его справочную страницу ), поэтому

sort... | cmd -i - > result.txt

В большинстве систем есть /dev/stdinспециальный файл (, аналогичный /dev/fd/0), который при открытии ведет себя как дублирование стандартного ввода, поэтому:

sort... | cmd -i /dev/stdin > result.txt

С некоторыми оболочками (ksh, zsh, bash )так же можно писать:

cmd -i <(sort...) > result.txt

Хотя это и сработало бы, этот файл является каналом, поэтому не доступен для поиска . Некоторым cmds может потребоваться файл с возможностью поиска или обычный файл, и это приведет к ошибке, если файл является каналом. Тогда у вас не будет другого выбора, кроме как использовать временный файл.

С помощью zshвы можете использовать =(...)форму замены процесса:

cmd -i =(sort...) > result.txt

для zshдля автоматического создания, заполнения и очистки временного файла.

То же, что и fish, с использованиемpsub:

cmd -i (sort... | psub -f) > result.txt

С bashпо-прежнему используется файл /dev/fd/x, но на этот раз в виде обычного временного файла, который удаляется сразу после его открытия для более надежной очистки -:

tmp=$(mktemp) && {
  rm -f -- "$file" &&
    sort... >&3 3>&- 4<&- &&
    cmd -i /dev/fd/4 3>&-
} 3> "$tmp" 4< "$tmp"
4
28.01.2020, 02:18

Теги

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