Расширение тильды в оболочке ~
является в основном программируемым. Она расширяется либо до каталога пользователя системного имени пользователя, объявленного в трейлинг-контексте (и отличное решение в этом направлении уже было предложено), либо до значения переменной оболочки $HOME
, либо вообще не расширяется.
Итак:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
Я постоянно меняю $HOME
, и я держу функцию в файле окружения моего шелла для его сброса:
home(){
HOME=~$USER
cd ~; pwd
}
Если вы хотите использовать тильду ~
каким-то образом, не относящимся к вашему домашнему каталогу, то сделайте это. Просто переназначьте $HOME
. Не бойтесь этого. $HOME
- это просто переменная оболочки, как и любая другая.
Еще одно мое предложение - это лишь небольшое расширение отличного совета @PSkocik об использовании $CDPATH
. Однако он не упомянул, что вы можете использовать и изменять $CDPATH
в строке без изменения текущего значения оболочки для $CDPATH
. Например:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
обязательно является встроенной оболочкой, но не является встроенной оболочкой POSIX special, и поэтому объявление значения для $CDPATH
не влияет на его текущее значение в оболочке. Если вы используете его так, как я сделал выше, значение $CDPATH
изменяется только для окружения одной команды cd
, после чего восстанавливается до прежнего значения. Я считаю, что вышеописанная техника наиболее полезна при использовании в сочетании с завершением истории. Я делаю то, что описано выше, перехожу в каталог, выполняю несколько команд, затем нажимаю вверх, пока не вернусь к команде cd
, и делаю backspace на сегменте пути или двух, чтобы перейти в другое место.
Теперь, если вы объедините эти две концепции, вы можете сделать так, чтобы ранее использованная команда означала что-то совершенно другое при следующем использовании.
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
Попробуйте
ssh -qx root@example.org "ls -t /path/to/logs | head -6" | rsync --files-from=- -avHS root@example.org:/path/to/logs/.