Я использую:
hg addremove
для этого после того, как удалил какой-либо корень из извлеченного каталога (или после того, как добавил узоров в файл .hgignore
).
hg addremove -h
говорит вам:
Add all new files and remove all missing files from the repository.
Mercurial жалуется на *
в имени файла. Зарезервированный символ, который нельзя использовать в именах файлов Windows. Однако само сообщение поступает на stderr
и не должно влиять на работу труб.
Альтернативой является использование
hg remove --after
, которое помечает файлы, которые удалены, но комментирует все файлы (те, которые еще есть, а также те, которые удалены) и, похоже, не реагирует на опцию -quiet
.
Когда xargs
видит \!\(\* -4.pdf
, он понимает ! (* -4.pdf
. При использовании xargs
необходимо создать входные данные, соответствующие его синтаксису ввода, который не похож ни на что другое. Простое добавление обратной косой черты перед местами позволяет справиться только с местами.
В Linux, * BSD и OSX, xargs
поддерживает параметр -0
, который говорит ему действовать с записями, разделенными нулевыми байтами без кавычек. hg status -0
создает записи, разделенные нулевыми байтами. Остается обработать промежуточную обработку, чтобы справиться с нулями вместо новых линий в качестве сепараторов.
С GNU awk или любым другим awk, который поддерживает нулевые байты в качестве разделителей записей (я думаю, что BSD/OSX awk), вы можете переключить преобразование в awk.
hg status -0 |
awk -v RS='\0' -v ORS='\0' '/^!/ {print substr($0, 3)}' |
xargs -0 hg remove
-121--290951- Я думаю, что у меня есть гораздо более простое решение, но я не уверен, насколько оно портативно. Рассмотрим:
$ cat trunc.c
#include <stdio.h>
int main() {
int c;
while(((c = getchar()) != EOF) && ((c & 0xff) != 0xff))
putchar(c);
return 0;
}
Это использует тот факт, что на машине с двумя дополнениями (-1 & 0xff) = = 0xff
. Это захватывает вашу программу, которая печатает EOF как символ. Я проверил его:
your_buggy_source_gen < any_ascii_file | trunc
, что эквивалентно cat any_ascii_file
, при условии, что в нем нет октетов значения 0xff.
Solía tener varios shells ejecutándose en screen
. En mi.khsrc, personalizaría varias configuraciones, incluidas $PS1 y $HISTFILE (e incluiría el nombre base del dispositivo tty ).
Esto fue relativamente fácil de reconstruir:
tty=$(basename $(tty))
histdir=~/.hist
mkdir -p $histdir
export HISTFILE=$histdir/history.$tty
export PS1=$USER@'$PWD ['$tty'] ${?#0}$ '
exec /usr/bin/ksh
Guarde esto como ~/bin/screenshell
y ejecute chmod +x ~/bin/screenshell
. Ahora puede ejecutar screen
y tener archivos de historial separados para cada ventana.
SHELL=~/bin/screenshell screen
Ejemplos:
Ventana 3
vagrant@/home/vagrant [3] 127$ history
1 history
2 error
3 history
Ventana 4
vagrant@/home/vagrant [4] $ history
1 history
vagrant@/home/vagrant [4] $ echo $HISTFILE
/home/vagrant/.hist/history.4
vagrant@/home/vagrant [4] $ tty
/dev/pts/4
Una alternativa sería ejecutar exec ksh
desde .kshrc
, pero necesitará algún tipo de prueba para evitar un bucle exec -.