如何在bash_profile中编写函数

时间:2017-03-28 23:20:35

标签: linux bash function shell alias

我们如何编写一个简单的常规函数​​,我可以将其添加到我的bashprofile中 可用于将控制台保护到我想要的任何主机。

但我的安全控制台必须通过跳转主机。这就是问题。

function func_name () {
 ssh jumphostname; 
 sc $hostname # from jump host secure console to another host given as input from terminal
}

此功能仅用于登录跳转主机,而不是从那里登录到另一台主机。

-bash-4.1 $ func_name host.me.com 应该通过jumphost给我控制台host.me.com

这个功能不可能吗? 我必须写一个脚本吗?

5 个答案:

答案 0 :(得分:0)

除非您使用命令[ ]模拟变量,否则不应在测试$( )中使用命令。仍不确定SSH是否会返回测试内容。 SSH需要您要加入的TTY,而不是您所在的TTY。这会导致问题!

没有SSH的例子......

suleiman@antec:~$ if [ "$(cat ~/test.txt)" ]; then echo "Hello World"; else echo "failed"; fi
Hello World
suleiman@antec:~$ if [ "$(cat /this/file/dont/exsist 2>/dev/null)" ]; then echo "Hello World"; else echo "failed"; fi
failed

<强>增加:

  

-bash:sc:未找到命令

这意味着您尚未在主机上安装spreadsheet

  

此功能仅用于登录跳转主机但不登录   安全控制台从那里进入另一台主机。

你想做什么?

你知道SSH的作用吗? 它会打开远程TTYs,或者换句话说:打开远程安全控制台

您无法运行脚本并在其中放置ssh登录名,然后认为之后的所有代码都将在新控制台中,这也不会发生。

您可以在控制台上运行ssh,这样您就可以获得自己的TTY并在其中添加一些命令。或者您将ssh与脚本中的某些命令结合使用,例如

ssh user@host echo "Hello World!"

您也可以通过

传递一些变量或文本ssh
echo "Hello World!" | ssh user@host cat

你可以用它做更多的事情,你不应该这样做!

答案 1 :(得分:0)

以下链接可帮助您继续

ssh username@host_address "command to execute"

例如输出:

arul@OA2:~/work/images$ ssh arul@localhost echo "hai"
arul@localhost's password: 
hai
arul@OA2:~/work/images$

ssh arul @ localhost命令将登录并且&#34; echo hai&#34;在当前登录的提示&#34;

中打印的命令

引文:https://www.cyberciti.biz/faq/unix-linux-execute-command-using-ssh/

答案 2 :(得分:0)

我会写这个

con.sole() {
    if ! ssh -T jumphostname true; then
        printf 'Jump host "%s" not available.\n' jumphostname >&2
        return 1
    fi
    sc "$@"
}

The square brace isn't part of the if statement syntax.这是一个单独的命令,与test相同。

答案 3 :(得分:0)

这就是我的方法。

  1. 在家里创建一个功能文件夹
  2. 将我的功能写为shell脚本
  3. 在我的bash_profile中将文件作为别名引用
  4. 重置源

示例

mkdir ~/.functions
echo '#!/bin/bash
      echo $1' > ~/.functions/ekho
echo 'alias ekho="sh ~/.functions/ekho"' >> ~/.bash_profile
source ~/.bash_profile

现在,您可以永远从任何位置调用方法。

ekho "Wow"

答案 4 :(得分:-2)

因为你不会在if和[...之间留下一个空格。 你想要的正确的sintax是......

function con.sole
{
    if [ ssh jumphostname ]; then
        sc $1;
    else 
        echo "host not available"
    fi 
}

来自墨西哥的问候!