SSH 交互式 shell 与 'sh' 子 shell 或非交互式 SSH shell 不同

SSH 交互式 shell 与 'sh' 子 shell 或非交互式 SSH shell 不同

总结

这有效:

ssh [email protected]
$ qconfig

但这些确实不是工作(这对我来说没有意义,因为它们应该是相同的):

ssh [email protected] qconfig
sh: qconfig: cannot execute - No such file or directory

或者

ssh [email protected]
$ sh
$ qconfig
sh: qconfig: cannot execute - No such file or directory

我想使用。如何使用?ssh [email protected] "some; commands; including; qconfig"

长版本

我有一个命令,我想通过非交互式 ssh 命令或 sh 子 shell 提交到远程主机,但通过这种方式提交时找不到它,尽管它在正常的交互式会话中发现。

细节:

操作系统:QNX

外壳: sh

交互式命令,一切按预期工作:然后在提示符下提供ssh [email protected]qconfig

但如果我sh这样做qconfig,它在那个子 shell 中不起作用

非交互式命令不是工作:ssh [email protected] qconfig

例子:

[me.LOCAL-PC] > ssh [email protected]
[email protected]'s password:
remotehost:/home/me $ echo $SHELL
/bin/sh
remotehost:/home/me $ qconfig
<…> (it works fine here)
remotehost:/home/me $ sh
remotehost:/home/me $ qconfig
sh: qconfig: cannot execute - No such file or directory
remotehost:/home/me $ exit
remotehost:/home/me $ sh -c qconfig
sh: qconfig: cannot execute - No such file or directory
remotehost:/home/me $ exit
[me.LOCAL-PC] > ssh [email protected] qconfig
[email protected]'s password:
sh: qconfig: cannot execute - No such file or directory

我对 QNX 不是很熟悉,所以不确定 qconfig 是否是内置的。如果是内置的,那就说得通了,因为 qconfig 不在我的 PATH 上,如果我这样做,它会which qconfig显示which: no qconfig in /usr/bin:/bin:<…>

我已经看到有一个 QNX qconfig,如下所示此链接,但我不太确定这就是正在执行的操作,即使它对我来说确实有效,因为我正在使用的那个不接受该页面列出的命令行选项 - 我尝试了-a,,-b-c它说-a: No such file or directory

哪些差异可能导致这样的问题?更重要的是,我怎样才能让shell像shell一样正确使用命令?ssh [email protected] <command>ssh [email protected]

答案1

当然,经过无休止的搜索和绞尽脑汁之后,我终于在 StackExchange 上提问,但仅仅半小时后我终于明白了。

检查您的命令是否是别名。

remotehost:/home/me $ alias
qconfig='some other command'

如果它是一个未设置的别名,那么您可以直接提供别名将执行的命令。因此,如果qconfig='some other command',则执行ssh [email protected] some other command

显然有人设置了系统,导致我尝试运行的命令被别名化。我习惯在which <command>会告诉您命令是否是别名的机器上工作,因此在这种情况下我没有想到要检查这一点。

相关内容