Определите функцию в рыбе, используйте ее с часами

Параметры, которые вы передаете в chmod, включают - символы, но не должны. Чтобы исправить это, удалите символы -:

for i in *
do
  u=${i:0:3};g=${i:3:3};o=${i:6:3};
  u=${u//-/};g=${g//-/};o=${o//-/};
  chmod -- "u=$u,g=$g,o=$o" "$i"
done
1
10.10.2018, 22:24
4 ответа

Другим способом было бы сохранить функцию , а затем попросить watchвызвать рыбу:

bash$ fish
fish$ function h
    echo hello
end
fish$ funcsave h
fish-or-bash$ watch -n 60 "fish -c h"

funcsaveсохраняет именованное определение функции в файл по пути ~/.config/fish/functions/, поэтому ~/.config/fish/function/h.fishв приведенном выше случае.

5
27.01.2020, 23:14

Да, я сделал это! Это делает работу, но я все еще хочу, чтобы у fishбыло что-то родное. Я выбираю имя blotch, чтобы оно не мешало watchbash.

function blotch
    # 2018-10-10
    # 
    # This is like the watch command of bash,
    # but re-implemented in fish.
    # 
    # It takes two arguments:
    #   n: the interval in seconds
    #   fun: a fish function
    # 
    # Therefore, it is always used as:
    # 
    #   blotch n fun
    # 
    # Take note that you should start fish with
    # 
    #   sudo fish
    #   
    # before doing anything with blotch that
    # requires administrator privileges.

    set time (string split " " -- $argv)[1]
    set command (string split " " -- $argv)[2]
    while true
        sleep $time
        eval $command
    end
end

И сохраните функцию для дальнейшего использования.

funcsave blotch
0
27.01.2020, 23:14

Другим довольно простым способом было бы...

function fonzie
    echo "This is Fonzie!"
end

while true
    fonzie
    sleep 10
end
0
27.01.2020, 23:14

Нет простого пути. По умолчанию watchиспользует /bin/shдля запуска команд, но принимает-x:

   -x, --exec
          Pass  command  to  exec(2)  instead  of  sh -c which reduces           
          the need to use extra quoting to get the desired effect.

Однако с fishничего работать не будет, так как функция hне экспортируется в окружающую среду:

$ watch -n 5 --exec  fish -c h
Every 5.0s: fish -c h                                                                                                                                                                 comp: Wed Oct 10 21:30:14 2018

fish: Unknown command 'h'
fish:
h
^

В bashвы могли экспортировать функцию в среду с помощью export -fи используйте его внутри watchвот так:

$ h1 () {
> echo hi
> }
$ type h1
h1 is a function
h1 ()
{
    echo hi
}
$ export -f h1
$ watch -n 60 bash -c h1
Every 60.0s: bash -c h1                                                                                                                                                               comp: Wed Oct 10 21:29:22 2018

hi

Если вы используете fish, вы можете создать скрипт-оболочку и вызвать его с помощьюwatch:

$ cat stuff.sh
#!/usr/bin/env fish

function h
    date
end

h

$ watch -n5./stuff.sh

Также обратите внимание, что fishимеет .и source, так что вы можете определить функцию в другом файле и иметь возможность повторно -использовать его в других подобных сценариях:

$ cat function
function h
    echo hi
end
$ cat call.sh
#!/usr/bin/env fish

. function

h
$ watch./call.sh
3
27.01.2020, 23:14

Теги

Похожие вопросы