Мое решение может быть немного сложным, но хорошо, кто знает.
Проблема в том, что для этого вам нужно будет подсчитать файлы ... что обычно делается с помощью:
$ ls | wc -l
Теперь, поскольку содержимое записывается в канал, а не в стандартный вывод, это будет требуется немного меньше времени для завершения (запись в терминал занимает немного времени, которое может стать значительным при 400 000 вызовов write (2)
). Это может занять некоторое время, но, тем не менее, вы можете реализовать это с помощью простого теста:
#!/bin/bash
LIMIT=1000
n=$(ls "$@" 2>/dev/null | head -n$LIMIT | wc -l)
if [ $n -ge $LIMIT ]; then
echo "This directory contains more than $LIMIT entries."
echo -n "Are you sure want to continue? (y/N) "
read confirm
if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then
exec ls "$@"
fi
else
exec ls "$@"
fi
Затем просто установите псевдоним в своем файле .bashrc
, чтобы вызвать этот сценарий вместо / bin / ls
:
alias ls='/path/to/my_ls.sh --color=auto'
Также убедитесь, что он правильно настроен chmoded:
$ chmod +x /path/to/my_ls.sh
Edit: Я добавил вызов к head
, чтобы ls
завершалось после $ LIMIT
строк вывода. Это должно сэкономить некоторое время (и фактически сделать его лучшим решением, чем тайм-аут
);)
Другой подход, который я бы предложил, - использовать тайм-аут. Если ls
не завершается, скажем, за 5 секунд, он должен остановиться и спросить вас, уверены ли вы в этом. Вот пример сценария (действителен для нескольких команд, а не только для ls
):
#!/bin/bash
TIMEOUT=5
if [ $# -le 0 ]; then
echo "Usage: $0 [command]"
exit 1
fi
# Try it silently for a few seconds...
timeout $TIMEOUT "$@" >/dev/null 2>&1
if [ $? -eq 124 ]; then
echo -n "Your command failed to run under "$TIMEOUT"s. "
echo -n "Retry without a timeout? (y/N) "
read confirm
if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then
exec "$@"
fi
else
exec "$@"
fi
Затем вы можете установить несколько псевдонимов, например:
alias ls='/path/to/script.sh ls --color=auto'
alias grep='/path/to/script.sh grep --color=auto'
alias cat='/path/to/script.sh cat'
Обратите внимание, что я тестирую $? -eq 124
потому что ...
Если время ожидания команды истекло, а
- preserve-status
не установлен, то выйти со статусом 124.
См. timeout ( 1)
для получения дополнительной информации.
Prueba esto :Primero, ponlo siempre después del shebanguse strict; use warnings;
. Luego, use este bucle for (adapte la lógica a sus necesidades):
foreach my $count (12..2550) {
if ($line[$count] == 1|0) {
print OUTPUT_FILE_HANDLE $header[$count]."\t".$orig_line."\n";
}
}