Параметры, которые вы передаете в 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
Другим способом было бы сохранить функцию , а затем попросить 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
в приведенном выше случае.
Да, я сделал это! Это делает работу, но я все еще хочу, чтобы у fish
было что-то родное. Я выбираю имя blotch
, чтобы оно не мешало watch
bash.
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
Другим довольно простым способом было бы...
function fonzie
echo "This is Fonzie!"
end
while true
fonzie
sleep 10
end
Нет простого пути. По умолчанию 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