Могу предложить вам (если вы в оболочке 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
Некоторые приложения понимают -
как стандартный ввод (проверьте его справочную страницу ), поэтому
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
Хотя это и сработало бы, этот файл является каналом, поэтому не доступен для поиска . Некоторым cmd
s может потребоваться файл с возможностью поиска или обычный файл, и это приведет к ошибке, если файл является каналом. Тогда у вас не будет другого выбора, кроме как использовать временный файл.
С помощью 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"