Принятие Вас уже имеет отдельный раздел (и если Вы не делаете, Вы, вероятно, хотите использовать gparted или что-то подобное, сделать одно), Вы просто делаете следующее (предпочтительно как пользователь root):
cp -R /home/whatever /path/to/destination
mv /home/whatever /home/whatever.orig
ln -s /path/to/destionation /home/whatever
И затем предположение, что все работает способ, которым это должно (входят в систему как пользователь и тест),
rm -rf /home/whatever.orig
Это копирует весь каталог (и все содержание) к целевой точке монтирования, переименовывает исходный корневой каталог (в случае, если что-то завинчено в процессе, затем мы можем восстановиться), создает символьную ссылку от нового местоположения до исходного корневого каталога (на который все (как/etc/passwd) все еще указывает), затем предполагая, что это работало, удаляет резервную копию, которую мы сделали, оставив копию, которую мы помещаем в целевую файловую систему.
tee
stdout
поток к оконечному устройству управления /dev/tty
.
(
exec 1> >(tee -a stdout.log)
: > stdout.log
#var="$(echo -e "one\ntwo" | tee /dev/tty | grep one)"
var="$(echo -e "one\ntwo" | tee -a /dev/tty stdout.log | grep one)"
echo "var=$var"
)
cat stdout.log
# one
# two
# var=one
Я не ясен, хотите ли Вы $var, или $var просто средство для конца. Для получения $var добавить var="$(cat log)"
sed -nre 'p;/one/w log' <(echo -e "one\ntwo")
Или сделайте Вы имеете в виду что-то вроде этого:
sed -nre 'p;/one/w log' -e 's/one/logged: &/p' <(echo -e "one\ntwo")
Примечание: sed's w
перезаписи команды log
каждый раз сценарий выполняется. Можно, конечно, добавить log
к основному журналу после sed выполнения. См.: Управляйте Сводкой для sed
Почему не только используют функцию:
#!/bin/bash
logAndEcho () {
echo -e "$@" >> LOGFILE.txt
echo -e "$@"
}
var=$(logAndEcho "one\ntwo\nThis is a test"|grep one)
echo "var=$var"
Это отправит все результаты в файл журнала и затем повторит данные к stdin, где можно получить его, как Вам нужно.
Я думаю, что необходимо использовать дополнительный дескриптор файла и tee
stdout
поток к нему так, чтобы дублированный stdout
поток может быть перенаправлен к файлу журнала. Этот путь нормальное stdout
поток через /proc/$$/fd/1
оставлен без изменений. И если grep
сбои для соответствия строке у Вас должен быть весь вывод команды что grep, использованный доступный в Вашем файле журнала для отладки целей.
useful="$(
exec 3<&1 3>stdout.log
curl -s http://example.com/some/data | tee /proc/$$/fd/3 | grep 'useful line'
exec 3<&-
)"
echo "useful=$useful"
# test case
(
# dup stdout using tee & an additional file descriptor
# open fd 3 for reading from where fd 1 is pointing to (i.e. stdout)
# anything that is being redirected to fd 3 will be redirected to stdout.log
#exec 3<&1 3>stdout.log
exec 3<&1 3> >(tr '[:lower:]' '[:upper:]' > stdout.log)
echo -e "one\ntwo" | tee /dev/fd/3 | grep one # Mac OS X
#echo -e "one\ntwo" | tee /proc/$$/fd/3 | grep one # Linux
exec 3<&-
)
Другой подход мог бы быть должен использовать именованные каналы, или Bash Совместно обрабатывает (доступный в Bash 4.0 и выше).
Для получения дополнительной информации о дескрипторах файлов см.: Дескриптор файла 101