登录FreeBSD ssh时使用bash shell

我正在寻找一种方法来确保我的命令是由一些使用csh作为shell的FreeBSD 11机器上的bash执行的.

以下是我的代码适用于Linux CentOS / Debian / MacOS X / pfSense 2.3(在FreeBSD 10.3上运行)甚至Windows 10 bash,但在FreeBSD 11上不起作用

cat "/some/filelist" | ssh -i "/home/user/.ssh/some_key" user@freebsd11  'bash -c "while read -r file; do stat -f \"%N;%c;%m\" \"\$file\"; done | sort"'

在FreeBSD 11上输出一个命令似乎是一个csh错误信息

Unmatched ".

检查哪个shell运行时,似乎csh运行.以下内容返回’csh’

ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'

根据我的理解,BSD系统不允许更改shell,除非使用heredoc,但我不能使用heredoc发送cat“/ some / filelist”.

当然,bash已经安装并且可以执行.
我对在FreeBSD上更改用户认shell不感兴趣.

这里有什么想法?

我最好的猜测是将问题分开:

1 /用cat / some / filelist发送文件ssh [..]’cat> somefile”

2 /在heredoc中使用发送的文件

ssh [..] 'bash -s' << 'EOF'
while read -r file; do stat -f "%N;%c;%m" "$file" | sort; done < "$somefile"
'EOF'

这个解决方案可以工作,但是很麻烦,建立2个连接而不是一个,如果远程由于某种原因无法写入’somefile’,则无法工作.

如果简化命令行,shell可能无关紧要.这应该可行
ssh </some/filelist -i /home/user/.ssh/some_key user@freebsd11 xargs -n 1 stat -f \"%N;%c;%m\" | sort

或者,您可能希望将正在使用的特定用户认shell更改为bash – 请参阅chsh(1)命令.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...