Существует плагин, называемый CodeoverView, который можно использовать на Windows (и Mac?): http://www.vim.org/scripts/script.php?script_id=2888 ?
В команде, где у нас есть много труб, перенаправляющих их выходы, есть ли способ узнать ценность эхо? До половины его исполнения или до определенного количества труб, в отличие от общего состояния всей команды?
В Bash есть вариабельность Pipestatus
, которая представляет собой массив, содержащий состояние выхода каждой команды в самом последнем конвейере.
$ ls -lrt --time-style=+"%b %d %Y %H:%M:%S" /bin/*|head -1|tr -s " "| \
cut -d " " -f 9|date --date - +%s
1429070400
$ echo ${PIPESTATUS[@]}
141 0 0 141 0
$ kill -l `expr 141 - 128`
PIPE
Это говорит нам, что LS
и командам
, вырезанные с помощью SIGPIPE, который ожидается, что их вывод не был полностью потребляется следующей командой в трубопроводе.
В первой неразрушенной команде я все еще получаю вывод без каких-либо ошибок и не то, что я ожидаю.
Это связано с датой дата
команда , работающая как она ожидает, но, я думаю, не так, как вы ожидаете.
Дата --дата -
не читает дату от stdin; Вместо этого он использует -
как строка даты. Я не вижу, где подразумевается значение одинокого -
, но, похоже, совпадает как 0
или 0000
, что означает «полуночь сегодня".
У вас есть эта команда
ls -lrt --time-style=+"%b %d %Y %H:%M:%S" /some/path/*.dat|head -1|tr -s " "|cut -d " " -f 9|date --date - +%s
Проблема с этим состоит в том, что дата
не ожидает его параметров через stdin , поэтому вам нужно разделить его на две части. Вы уже попытались этому во второй части вашего вопроса:
var1=$(ls -lrt --time-style=+"%b %d %Y %H:%M:%S" /some/path/*.dat|head -1|tr -s " "|cut -d " " -f 9)
echo "var1='$var1'" # eg var1='11:37:39'
var2=$(date --date="$var1" +%s)
echo "var2='$var2'" # eg var2='1429094259'
Однако, когда вы запустите команду дата
, она дает вам время (11:37:39 - 1429094259) для Сегодня (сравните его с ценностью для var2
с моим 11:04:45 - 1429092286, и вы увидите, что они очень похожи).
Возможно Stat --Format '% y' /tmp/path/*.dat
Было бы легче?
Некоторые ответы на конкретные вопросы
Есть ли способ узнать Значение echo $? [Средний путь через трубу]? Не напрямую, нет. Тем не менее, вы сможете либо разделить трубопровод на две части с временным файлом для удержания промежуточных результатов или сохранения от $?
значение, как вы идете.
cmd1 | ( cmd2; SS=$?; echo $SS >/tmp/cmd2.ss; exit $SS ) | cmd3
cmd2_status=$(</tmp/cmd2.ss)
Как я могу сделать то, что я хочу в одном трубопроводе? Вы можете оценить время и пройти, что на сегодняшний день, что-то вроде этого
date --date=$( cmd1 | cmd2 | cmd2 ) +%s
Почему дата --дация = -
Время в полночь? Дата
Команда пытается сделать что-то значимое с неверной датой «-». Это происходит, что это в конечном итоге интерпретируется как «полуночная сегодня». Я бы не буду банк на этом, хотя; Если вы действительно хотите полуть, я бы пошел на явную дату --дате = '00: 00 '