Если следующее не работает ...
cd ./target_dir
set -- *
onedrive-cli put "$@"
Тогда это, вероятно, потому, что вам нужно положить
для каждого аргумента, и в этом случае это может:
{ printf 'one-drive-cli'
printf " put ///%s///" *
} | sed 's|'\''|&"&"&|g;s|///|'\''|g' |
. /dev/stdin
Но если , что не работает, то ваш цикл for
, вероятно, является лучшим решением оболочки, потому что ваш скрипт python будет поддерживать только одну загрузку на вызов.
Однако лучший способ сделать это - отредактировать скрипт python в соответствии с вашими потребностями.
Проблема решается загрузкой последней.c. Перейдите в строку 753, измените строку с:
if (until && until < ut.ut_time)
continue;
на
if (until && until > ut.ut_time)
continue;
и перекомпилируйте ее.
Насколько я знаю, ближайшая вещь bash должен попробовать... наконец
блок из более C-подобный язык программирования (который, вероятно, вы хотели бы, если бы он был доступен) является trap
конструкция, которая работает так:
trap "rm -f *.class" EXIT
javac *.java && java -ea Test
Это будет выполнять «rm -f * .class», когда ваш сценарий выходит. Если у вас есть что-то более сложное, вы могли бы поставить его в функцию:
cleanup() {
...
}
trap cleanup EXIT
javac *.java && java -ea Test
Если вы так склонны, вы можете превратить это в довольно общую идиому, которая работает примерно как try... catch... finally
block in C. Что-то подобное:
(
trap "catch_block; exit" ERR
trap finally_block EXIT
# contents of try goes here
)
Обратите внимание, что скобки ограничивают субоболочку; при такой конструкции выходит только подслой в случае сбоя команды, а не весь сценарий. Помните, что субоболочки являются довольно дорогими в вычислительном отношении, поэтому не используйте слишком много (сотни) из них. В зависимости от сценария, вы сможете добиться такого же эффекта более эффективно с помощью функций оболочки и ловушки ... RETURN
, но вы должны провести расследование.
При работе с sed
Мне обычно легче всего последовательно сужать мой возможный результат. Вот почему я иногда опираюсь на !
оператор отрицания. Очень часто проще урезать неинтересный ввод, чем точечно выбирать интересный вид - по крайней мере, таково мое мнение на этот счет.
Я нахожу этот метод более встроенным в поведение по умолчанию sed
, которое заключается в автоматической печати пространства шаблона в конце сценария. Для простых вещей, таких как это, это также может легко привести к надежному скрипту - скрипт, который не зависит от определенных расширений синтаксиса реализаций для работы (как обычно видно с sed
{functions}
) .
Поэтому я рекомендовал вам сделать:
sed '10,15!d;/pattern/!d;=' <input
... который сначала отсекает любую строку, не входящую в диапазон строк 10 & 15, и из числа тех, которые остаются, отсекает любую строку, которая не соответствует образцу
. Если вы предпочитаете, чтобы номер строки sed
печатался на той же строке, что и соответствующая строка, я, вероятно, посмотрю на paste
в этом случае. Может быть...
sed '10,15!d;/pattern/!d;=' <input |
paste -sd:\\n -
... который будет заменять входные \n
ewlines символом :
или другим \n
ewline.
Например:
seq 150 |
sed '10,50!d;/5/!d;=' |
paste -sd:\\n -
... отпечатки...
15:15
25:25
35:35
45:45
50:50
-121--125639- Я считаю, что ошибка является просто ошибкой документации.
Версия util-linux
Ubuntu 14.10 (откуда происходит последний
) - это версия util-linux
2.25
Fedora 21.
Страница man
для last
на Fedora гласит:
-t, --until time
Display the state of logins until the specified time.
что вы получаете как фактическое поведение.
Я предлагаю вам создать ошибку против util-linux
на Ubuntu (или Debian) и CentOS для страницы man
.