我有一个简短的简单脚本,它编译.c
文件并在运行tcsh
的远程服务器上运行它然后只是将控制权交给我的机器(这是为了学校,我需要我的程序在实验室计算机上正常工作,但想在我的机器上编辑它们等。它以这种方式运行命令:
ssh -T user@server << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF
到目前为止它工作正常,但每次我这样做都会发出警告:
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
我知道这在技术上不是问题,但它太过烦人了。我正在尝试做学校工作,检查我的程序输出等等,这会弄乱一切,我讨厌它。
我在我的机器上运行这个版本的ssh:
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
服务器上的此版本的tcsh:
tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux)
这个版本的服务器上的ssh:
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
答案 0 :(得分:1)
在OS X上,我用ssh -t -t
解决了类似的问题(对于Vagrant上的脚本配置)(注意-t
来了两次)。
基于ssh BSD手册页的建议:
-T禁用伪终端分配。
-t强制伪终端分配。这可以用于在远程机器上执行任意基于屏幕的程序,这可以 非常有用,例如实现菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty。
答案 1 :(得分:1)
该消息实际上是由shell(在本例中为tcsh)打印的。 您可以使用
<input
formControlName="idAnswerRadio"
class="form-check-input cursor-pointer radio-button"
type="radio"
(click)="manageAnswer(n)">
<!-- Other inputs... -->
<input [disabled]="getDisabled()">
确保它属于strings /usr/bin/tcsh | grep 'no access to tty'
本身。
它与ssh的关系非常松散,即tcsh
只是触发器,而不是原因。
您应该更改方法,而不要使用ssh
。而是将可执行文件custom_script放入HERE DOCUMENT
并通过ssh运行它。
/path/custom_script
或者,只需将复杂的命令作为单行运行即可。
# this will work
ssh user@dest '/path/custom_script'
答案 2 :(得分:0)
如果运行 tcsh
对您来说并不重要,请指定一个不同的 shell,它会起作用:
ssh -T user@server bash << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF