Function
在fish中定義函式,與watch一起使用
我想定義一個函式,並每隔 n 秒呼叫一次該函式。舉個例子:
function h echo hello end
呼叫
h
工作:david@f5 ~> h hello
但是在使用watch時,它不會…
watch -n 60 "h"
…我得到:
Every 60.0s: h f5: Wed Oct 10 21:04:15 2018 sh: 1: h: not found
如何
watch
使用我剛剛定義的功能在魚中執行?
另一種方法是保存函式,然後要求
watch
呼叫fish:bash$ fish fish$ function h echo hello end fish$ funcsave h fish-or-bash$ watch -n 60 "fish -c h"
funcsave
將命名函式定義保存到 path 中的文件中~/.config/fish/functions/
,因此~/.config/fish/function/h.fish
在上述情況下。
沒有簡單的方法。預設情況下
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
has.
,source
因此您可以在另一個文件中定義函式並能夠在其他腳本中重新使用它,例如:$ cat function function h echo hi end $ cat call.sh #!/usr/bin/env fish . function h $ watch ./call.sh