mirror of
https://github.com/DictXiong/dotfiles.git
synced 2026-02-22 06:15:40 +08:00
Compare commits
4 Commits
426e97c10e
...
ee44717891
| Author | SHA1 | Date | |
|---|---|---|---|
| ee44717891 | |||
| d283671f25 | |||
| bdef3b52d1 | |||
| c86cc85e24 |
99
functions/_beam
Normal file
99
functions/_beam
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#compdef beam
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Beam-Go Zsh Completion Script
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
_beam() {
|
||||||
|
local context state state_descr line
|
||||||
|
typeset -A opt_args
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :_beam_commands' \
|
||||||
|
'*:: :->args'
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(args)
|
||||||
|
case $line[1] in
|
||||||
|
(serve) _beam_serve ;;
|
||||||
|
(add) _beam_add ;;
|
||||||
|
(list) _beam_list ;;
|
||||||
|
(del) _beam_del ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Subcommand Definitions ---
|
||||||
|
|
||||||
|
(( $+functions[_beam_commands] )) ||
|
||||||
|
_beam_commands() {
|
||||||
|
local -a commands
|
||||||
|
commands=(
|
||||||
|
'serve:Start the beam server daemon'
|
||||||
|
'add:Share a file or directory'
|
||||||
|
'list:List active shares'
|
||||||
|
'del:Delete a share by path or code'
|
||||||
|
)
|
||||||
|
_describe -t commands 'beam command' commands
|
||||||
|
}
|
||||||
|
|
||||||
|
_beam_serve() {
|
||||||
|
_arguments \
|
||||||
|
'(-d --database)'{-d,--database}'=[Database directory (Required)]:directory:_path_files -/' \
|
||||||
|
'(-p --port)'{-p,--port}'=[Port to listen on (default :8280)]:port:' \
|
||||||
|
'(-s --socket)'{-s,--socket}'=[Socket path]:socket path:_files' \
|
||||||
|
'--subpath=[Enable subpath sharing]'
|
||||||
|
}
|
||||||
|
|
||||||
|
_beam_add() {
|
||||||
|
_arguments \
|
||||||
|
'(-d --days)'{-d,--days}'=[Expiration days (default 7)]:days:' \
|
||||||
|
'(-s --socket)'{-s,--socket}'=[Socket path]:socket path:_files' \
|
||||||
|
'1:file to share:_files'
|
||||||
|
}
|
||||||
|
|
||||||
|
_beam_list() {
|
||||||
|
_arguments \
|
||||||
|
'(-s --socket)'{-s,--socket}'=[Socket path]:socket path:_files'
|
||||||
|
}
|
||||||
|
|
||||||
|
_beam_del() {
|
||||||
|
_arguments \
|
||||||
|
'(-s --socket)'{-s,--socket}'=[Socket path]:socket path:_files' \
|
||||||
|
'(-c --code)'{-c,--code}'=[Share code]:share code:_beam_active_codes' \
|
||||||
|
'1:shared path:_files'
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Helpers ---
|
||||||
|
|
||||||
|
# 动态获取当前的 Share Code
|
||||||
|
# 它会尝试读取用户当前输入的 -s 参数,去连接正确的 socket
|
||||||
|
_beam_active_codes() {
|
||||||
|
local socket_path=""
|
||||||
|
|
||||||
|
# 从 Zsh 解析的参数中提取 socket 路径
|
||||||
|
if [[ -n ${opt_args[-s]} ]]; then
|
||||||
|
socket_path=${opt_args[-s]}
|
||||||
|
elif [[ -n ${opt_args[--socket]} ]]; then
|
||||||
|
socket_path=${opt_args[--socket]}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 构造查询命令
|
||||||
|
local cmd_args=()
|
||||||
|
cmd_args+=("list")
|
||||||
|
[[ -n $socket_path ]] && cmd_args+=("-s" "$socket_path")
|
||||||
|
|
||||||
|
# 调用 beam list,跳过前两行表头,提取 Code($1) 和 Path($3)
|
||||||
|
# 2>/dev/null 防止服务未启动时报错打印到终端
|
||||||
|
local -a shares
|
||||||
|
shares=("${(@f)$(beam "${cmd_args[@]}" 2>/dev/null | awk 'NR>2 {print $1":"$2" "$3" "$4}')}")
|
||||||
|
|
||||||
|
if [[ ${#shares} -gt 0 ]]; then
|
||||||
|
_describe -t shares 'active share' shares
|
||||||
|
else
|
||||||
|
_message 'no active shares or server not running'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_beam "$@"
|
||||||
35
functions/_beaml
Normal file
35
functions/_beaml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#compdef beaml
|
||||||
|
|
||||||
|
_beaml() {
|
||||||
|
local context state line
|
||||||
|
typeset -A opt_args
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'1: :->cmds' \
|
||||||
|
'2: :->args'
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
cmds)
|
||||||
|
local commands; commands=(
|
||||||
|
'add:Add a new item'
|
||||||
|
'del:Delete an item'
|
||||||
|
'list:List all items'
|
||||||
|
)
|
||||||
|
_describe -t commands 'beaml commands' commands
|
||||||
|
;;
|
||||||
|
args)
|
||||||
|
case $line[1] in
|
||||||
|
add)
|
||||||
|
_files
|
||||||
|
;;
|
||||||
|
del)
|
||||||
|
local -a items
|
||||||
|
items=( /pss/lite/*(N:t) )
|
||||||
|
_describe -t items 'item to delete' items
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
_beaml "$@"
|
||||||
38
scripts/riot
38
scripts/riot
@ -93,7 +93,10 @@ parse_remote() {
|
|||||||
TRUST_SERVER=1
|
TRUST_SERVER=1
|
||||||
PORT="" # optional
|
PORT="" # optional
|
||||||
USERNAME="" # optional
|
USERNAME="" # optional
|
||||||
SSH_OPTIONS=("-o" "RequestTTY=yes")
|
SSH_OPTIONS=("-o" "ServerAliveInterval=60")
|
||||||
|
if [[ -t 1 ]]; then
|
||||||
|
SSH_OPTIONS+=("-o" "RequestTTY=yes")
|
||||||
|
fi
|
||||||
if [[ "$RIOT_TRUST_CLIENT" == "1" ]]; then
|
if [[ "$RIOT_TRUST_CLIENT" == "1" ]]; then
|
||||||
SSH_OPTIONS+=("-o" "PermitLocalCommand=yes")
|
SSH_OPTIONS+=("-o" "PermitLocalCommand=yes")
|
||||||
if [[ "$(get_os_type)" != "msys" ]]; then
|
if [[ "$(get_os_type)" != "msys" ]]; then
|
||||||
@ -195,20 +198,26 @@ run_ssh()
|
|||||||
# sshl
|
# sshl
|
||||||
run_sshl()
|
run_sshl()
|
||||||
{
|
{
|
||||||
is_port() {
|
local arg left right localsock access
|
||||||
if [[ "$1" =~ ^[1-9][0-9]*$ && $1 -gt 1 && $1 -lt 65535 ]]; then return 0; else return 1; fi
|
local res="${1//[^:]}"
|
||||||
}
|
local lorr="-L"
|
||||||
res="${1//[^:]}"
|
if [[ "${FUNCNAME[1]}" == "run_sshr" ]]; then
|
||||||
|
lorr="-R"
|
||||||
|
fi
|
||||||
if [[ ${#res} -eq 2 ]]; then
|
if [[ ${#res} -eq 2 ]]; then
|
||||||
arg="$1"
|
arg="$1"
|
||||||
elif [[ ${#res} -eq 0 ]]; then
|
elif [[ ${#res} -eq 0 ]]; then
|
||||||
arg="$(get_free_port):localhost:$1"
|
if [[ "$lorr" == "-R" ]]; then
|
||||||
|
arg="$1"
|
||||||
|
else
|
||||||
|
arg="$(get_free_port):localhost:$1"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
left=${1%%:*}
|
left=${1%%:*}
|
||||||
right=${1##*:}
|
right=${1##*:}
|
||||||
if is_port "$left"; then
|
if check_port "$left"; then
|
||||||
arg="$1"
|
arg="$1"
|
||||||
elif is_port "$right"; then
|
elif check_port "$right"; then
|
||||||
arg="$(get_free_port):$1"
|
arg="$(get_free_port):$1"
|
||||||
else
|
else
|
||||||
arg="$1"
|
arg="$1"
|
||||||
@ -220,13 +229,19 @@ run_sshl()
|
|||||||
else
|
else
|
||||||
access="localhost:${arg%%:*}"
|
access="localhost:${arg%%:*}"
|
||||||
fi
|
fi
|
||||||
SSH_OPTIONS+=("-NC" "-L" "$arg")
|
SSH_OPTIONS+=("-NC" "$lorr" "$arg")
|
||||||
prepare_ssh_cmd ssh
|
prepare_ssh_cmd ssh
|
||||||
print_cmd
|
print_cmd
|
||||||
fmt_note " > please access $access"
|
fmt_note " > please access $access"
|
||||||
eval_or_echo
|
eval_or_echo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# sshr
|
||||||
|
run_sshr()
|
||||||
|
{
|
||||||
|
run_sshl "$1"
|
||||||
|
}
|
||||||
|
|
||||||
# sshd
|
# sshd
|
||||||
run_sshd()
|
run_sshd()
|
||||||
{
|
{
|
||||||
@ -389,6 +404,11 @@ router() {
|
|||||||
test "${#positional[@]}" -eq 3 || fmt_fatal "sshl requires exactly one argument"
|
test "${#positional[@]}" -eq 3 || fmt_fatal "sshl requires exactly one argument"
|
||||||
run_sshl "${positional[2]}"
|
run_sshl "${positional[2]}"
|
||||||
;;
|
;;
|
||||||
|
sshr )
|
||||||
|
test -n "${positional[2]}" || fmt_fatal "no target address provided"
|
||||||
|
test "${#positional[@]}" -eq 3 || fmt_fatal "sshr requires exactly one argument"
|
||||||
|
run_sshr "${positional[2]}"
|
||||||
|
;;
|
||||||
sshd )
|
sshd )
|
||||||
test "${#positional[@]}" -le 3 || fmt_fatal "sshd requires one or no arguments"
|
test "${#positional[@]}" -le 3 || fmt_fatal "sshd requires one or no arguments"
|
||||||
if [[ "${#positional[@]}" -eq 3 ]]; then
|
if [[ "${#positional[@]}" -eq 3 ]]; then
|
||||||
|
|||||||
@ -40,9 +40,9 @@ test $(echo n | tools/common.sh ask_for_yN "test") = "0"
|
|||||||
test $(echo | tools/common.sh ask_for_yN "test") = "0"
|
test $(echo | tools/common.sh ask_for_yN "test") = "0"
|
||||||
test $(echo | tools/common.sh ask_for_Yn "test") = "1"
|
test $(echo | tools/common.sh ask_for_Yn "test") = "1"
|
||||||
test $(DFS_QUIET=1 tools/common.sh ask_for_Yn "test") = "1"
|
test $(DFS_QUIET=1 tools/common.sh ask_for_Yn "test") = "1"
|
||||||
test "$(DFS_TRUST=1 riot time@is.impt:2222/yes@you-r.right/you@are.really.recht./ibd./try@it,another@host scp /tmp/ ./tmp -D 2>/dev/null)" = 'scp -P 12022 -o RequestTTY=yes -o PermitLocalCommand=yes -o ControlMaster=auto -o ControlPath=~/.ssh/master-socket/%C -o ProxyJump=time@is.impt:2222,yes@you-r.right:12022,you@are.really.recht:12022,root@ibd:12022 -r try@it.dxng.net:/tmp/ ./tmp
|
test "$(DFS_TRUST=1 riot time@is.impt:2222/yes@you-r.right/you@are.really.recht./ibd./try@it,another@host scp /tmp/ ./tmp -D 2>/dev/null)" = 'scp -P 12022 -o ServerAliveInterval=60 -o PermitLocalCommand=yes -o ControlMaster=auto -o ControlPath=~/.ssh/master-socket/%C -o ProxyJump=time@is.impt:2222,yes@you-r.right:12022,you@are.really.recht:12022,root@ibd:12022 -r try@it.dxng.net:/tmp/ ./tmp
|
||||||
scp -P 12022 -o RequestTTY=yes -o PermitLocalCommand=yes -o ControlMaster=auto -o ControlPath=~/.ssh/master-socket/%C -o ForwardX11=yes -o ForwardAgent=yes -r another@host.dxng.net:/tmp/ ./tmp'
|
scp -P 12022 -o ServerAliveInterval=60 -o PermitLocalCommand=yes -o ControlMaster=auto -o ControlPath=~/.ssh/master-socket/%C -o ForwardX11=yes -o ForwardAgent=yes -r another@host.dxng.net:/tmp/ ./tmp'
|
||||||
test "$(riot you@example.com:55 -tD ssh --password -- ping -c 1 2>/dev/null)" = 'ssh -p 55 -o RequestTTY=yes -o ForwardX11=yes -o ForwardAgent=yes -o PasswordAuthentication=yes -o PubkeyAuthentication=no you@example.com ping -c 1'
|
test "$(riot you@example.com:55 -tD ssh --password -- ping -c 1 2>/dev/null)" = 'ssh -p 55 -o ServerAliveInterval=60 -o ForwardX11=yes -o ForwardAgent=yes -o PasswordAuthentication=yes -o PubkeyAuthentication=no you@example.com ping -c 1'
|
||||||
|
|
||||||
# check alias
|
# check alias
|
||||||
alias p114
|
alias p114
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user