$()做什么?

时间:2015-10-22 18:39:18

标签: bash shell

尝试解决此问题:

https://unix.stackexchange.com/questions/128894/ssh-exchange-identification-connection-closed-by-remote-host-not-using-hosts-d

并且一个解决方案的一部分是使用:

a.left = null

在我的案例中输出:

$(which sshd)

我为所有bash命令保留了备忘单,并希望添加:

Could not load host key: /etc/ssh_host_rsa_key
Could not load host key: /etc/ssh_host_dsa_key

它似乎正在为sshd可执行文件做些什么。

相关

What does it mean in shell when we put a command inside dollar sign and parentheses: $(command)

2 个答案:

答案 0 :(得分:3)

$()是一种执行另一个进程并收集其输出的方法。有关详细信息,请参阅http://wiki.bash-hackers.org/syntax/expansion/cmdsubst

当这样的表达式传递给bash时,其输出被执行。它有效地使用其完整路径调用命令,因为这是which返回的内容。打印的消息来自该表达式启动的sshd进程。

请注意which找到可执行扫描$PATH,与执行命令时相同。换句话说,执行which输出它不会影响运行哪个可执行文件,只会影响操作系统跟踪的可执行文件的完整路径。

答案 1 :(得分:0)

$(which sshd)将替换为运行which sshd生成的标准输出。 which sshd将返回调用sshd时调用的可执行文件的完全限定路径:

  

which返回将在当前环境中执行的文件(或链接)的路径名,其参数为          作为严格符合POSIX的shell中的命令给出。它通过在PATH中搜索匹配的可执行文件来完成此操作          参数的名称。它不遵循符号链接。

在命令行上运行的示例,其中>表示输入提示符:

COMMAND: which sshd
 OUTPUT: /usr/sbin/sshd

COMMAND: echo "The full path of sshd is $(which sshd)"
 OUTPUT: The full path of sshd is /usr/sbin/sshd

COMMAND: $(which sshd)
 OUTPUT: [[whatever output you get from running /usr/sbin/sshd]]