Рыбная раковина - удалить файл и выполнить команду

Я хочу выполнить простую команду

rm -f *.zip or true ; and date

Это означает, что я хочу удалить все zip-файлы по текущему пути и показать текущую дату. Я все равно хочу увидеть дату. Даже если таких файлов нет.

Я бы сделал это в bash как:

rm -f *.zip || true; date

Вот что я получаю от рыбы:

введите здесь описание изображения

ОБНОВЛЕНИЕ

Читая документацию, я обнаружил, что

введите здесь описание изображения

Получается, что (не могу в это поверить)

Я должен написать простой rm -f *.zip как

set files *.zip
   if count $files > /dev/null
     rm -f *.zip
end

Я очень недоволен таким решением,

должно быть что-то лучше

ОБНОВЛЕНИЕ Я пробовал

rm -f "*.zip"; date  

Но файлы не удаляются, потому что расширения не происходит.

Обновить

Я хотел скрыть выражение в функции как

                    function rmf
                    set files $argv
                    set quantity (count $files)
                        if [ $quantity -gt 0 ]
                            echo "yes";
                            rm -f $files
                        else
                          echo "not enough"
                    end  
                end

Но проблема в том, что функция rmf не рассматривается как функция подсчета


person Tebe    schedule 24.08.2017    source источник
comment
Почему бы тебе просто не сделать rm *.zip; date?   -  person glenn jackman    schedule 24.08.2017
comment
в bash он запросит подтверждение, я не хочу его иметь. Это упрощенный пример (на самом деле у меня сценарий побольше), т.е. это привычка. Это не проблема kagda.ru/i/11015641163_24-08 -2017-21: 35: 50_1101.png   -  person Tebe    schedule 24.08.2017
comment
@ ГляОпаОпа, ГляОпаОпа - звучит довольно забавно (имея дело с нашим украинским менталитетом) :-)   -  person RomanPerekhrest    schedule 24.08.2017
comment
Пожалуйста, не используйте тег bash, если кто-то, имеющий опыт работы с bash, не может ответить на вопрос.   -  person Charles Duffy    schedule 25.08.2017
comment
А? В баше запросит подтверждение? Только если у вас есть псевдоним или функция, добавляющая аргумент -i к rm; из коробки, без каких-либо настроек в вашей ОС или дистрибутиве, bash не делает ничего подобного.   -  person Charles Duffy    schedule 25.08.2017
comment
да, в дистрибутиве ubuntu он по умолчанию имеет псевдоним. безразлично это не разумная вещь. В любом случае это не проблема. Спасибо   -  person Tebe    schedule 25.08.2017


Ответы (3)


Я согласен, это неприятный случай. поведение подстановочных знаков fish почти всегда лучше (попробуйте touch *.zip в bash, чтобы понять, почему) с очень важным и раздражающим исключением rm.

Вероятно, самый простой обходной путь:

set tmp *.zip ; rm -f $tmp ; date
person ridiculous_fish    schedule 25.08.2017
comment
он работает, потому что набор является исключением для расширения (также считается). Есть еще третья специальная функция, я не могу вспомнить, как она называется, а вы? - person Tebe; 25.08.2017
comment
for (как в for file in *), set и count - исключения. - person faho; 25.08.2017

Последняя команда:

rm -f *.zip ; date   

Он работает нормально, НО в Fish 2.6, когда у меня возникла проблема, я использовал fish 2.2. Они изменили поведение в более поздних версиях.

Плюс некоторые предостережения:

Нет необходимости в и до даты, он ведет себя как && в bash, поэтому игнорирует

Да, он выдает ошибку, но делает то, что должен

См. Эту проблему https://github.com/fish-shell/fish-shell/issues/683

Точное объяснение почему:

введите здесь описание изображения

person Tebe    schedule 24.08.2017

person    schedule
comment
набирается слишком долго. Руководство утверждает, что 2. Fish должна быть удобной для пользователя, поэтому в bash должно быть более удобное средство вроде rm -f *. - person Tebe; 24.08.2017