gpt4 book ai didi

bash - 如何覆盖 bash 命令?

转载 作者:行者123 更新时间:2023-11-29 09:03:38 25 4
gpt4 key购买 nike

所以我基本上是在尝试覆盖我的 ssh 命令,所以我只需要键入 ssh 并且默认情况下它会连接到我的主服务器。然后,如果我向它传递一个参数,比如 username@server_port,它就会运行基本命令。

# Fast SSH  (a working progress) TODO: make work without naming the function `fssh`
function fssh() {

ALEX_SERVER_CONNECTION=$ALEX_SERVER_UNAME@$ALEX_SERVER_PORT

# if the `ssh` argument is not set
if [ -z "${1+xxx}" ]; then
# echo "ALEX_SERVER_CONNECTION is not set at all";
ssh $ALEX_SERVER_CONNECTION
fi

# if the `ssh` argument is set
if [ -z "$1" ] && [ "${1+xxx}" = "xxx" ]; then
ssh $1
fi
}

如果 ssh 前面没有 f,我如何让它工作?

所以基本上这是正确完成后的样子:

# Fast SSH
function ssh() {

ALEX_SERVER_CONNECTION=$ALEX_SERVER_UNAME@$ALEX_SERVER_PORT

# if the `ssh` argument is not set
if [ -z "${1+xxx}" ]; then # ssh to the default server
command ssh $ALEX_SERVER_CONNECTION
fi

# if the `ssh` argument is set
if [ -z "$1" ] && [ "${1+xxx}" = "xxx" ]; then # ssh using a different server
command ssh $1
fi
}

最佳答案

解决方案

您需要在您的函数中指定ssh 命令的绝对路径,否则它将是递归的。例如,而不是:

function ssh() { ssh $USER@localhost; } # WRONG!

你应该写:

function ssh() { command ssh $USER@localhost; }

使用内置的 commandPATH 获取 ssh(如@chepner 所建议):

command [-pVv] command [arg ...]

  Run  command  with  args  suppressing  the normal shell function
lookup. **Only builtin commands or commands found in the PATH are
executed**.

为什么不用别名?

使用函数 是正确的模式,阅读 Aliases and Functions sections from the man page .

ALIASES

There is no mechanism for using arguments in the replacement text. If arguments are needed, a shell function should be used (see FUNCTIONS below).

诊断

在命名您的自定义函数 ssh 时,请执行以下操作:

  1. 确保重新加载您的 shell 配置:source ~/.bashrc
  2. 检查什么是 ssh 使用:which sshtype ssh

typewhich

在声明自定义函数之前我得到:

type ssh  # → ssh is /usr/bin/ssh
which ssh # → /usr/bin/ssh

在声明 function ssh() { ssh my-vm; 之后},我得到了:

which ssh # → ssh () { ssh my-vm; }
type ssh # → ssh is a shell function

建议

使用 shbash 语法:

  • sh:测试是用[ … ]完成的,可移植但不强大;
  • bash 测试已完成 [[ … ]]function 关键字,可移植性较差但对开发人员友好。

关于bash - 如何覆盖 bash 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com