В bash
, typeset
и declare
точно то же. Единственная разница - это typeset
считается устаревшим.
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
Set variable values and attributes.
Obsolete. See `help declare'.
Страница справочника даже перечисляет их на одном дыхании:
declare [-aAfFgilrtux] [-p] [name[=value] ...]
typeset [-aAfFgilrtux] [-p] [name[=value] ...]
Declare variables and/or give them attributes.
typeset
является портативным к некоторым другим оболочкам, например, ksh93
. При стремлении к мобильности перекрестной оболочки использовать typeset
(и удостоверьтесь, что способ, которым Вы называете его, является портативным). Если Вы не заботитесь о такой мобильности, использовать declare
.
С некоторыми подсказками от здесь мне удалось заставить работать следующее:
script=/path/to/script
num=$(dbus-send --print-reply --dest=org.kde.kwin.Scripting \
/Scripting \
org.kde.kwin.Scripting.loadScript \
string:"$script" |
awk 'END {print $2}' )
dbus-send --print-reply --dest=org.kde.kwin.Scripting \
/$num \
org.kde.kwin.Scripting.run
Обновление :это то, что мне пришлось сделать в 2019 году, чтобы заставить это работать:
# don't use ~/ in this path:
script="/path/to/script"
num=$(dbus-send --print-reply --dest=org.kde.KWin \
/Scripting org.kde.kwin.Scripting.loadScript \
string:"$script" | awk 'END {print $2}' )
dbus-send --print-reply --dest=org.kde.KWin /$num \
org.kde.kwin.Scripting.run