我想聪明一点,将远程文件与本地文件进行比较,而无需先手动下载它。我可以通过以下方式获取远程文件的内容
ssh user@remote-host "cat path/file.name"
Run Code Online (Sandbox Code Playgroud)
然而,管道到 diff
ssh user@remote-host "cat path/file.name" | diff path/file.name
Run Code Online (Sandbox Code Playgroud)
给我这个:
diff: missing operand after `path/file.nae'
diff: Try `diff --help' for more information.
Run Code Online (Sandbox Code Playgroud)
我设置了 ssh 密钥,所以它不会提示我输入密码。对此有什么解决方法?
从ls,grep等输出颜色通常很好。但是当您不想要它时(例如在将结果传送到另一个命令的脚本中)是否有可以将其关闭的开关? 如果它不是默认设置,则将其ls -G打开(使用某些BSD 派生版本ls),但ls +G不会将其关闭。还有什么会吗?
这应该很简单,但由于某种原因它不起作用:
sed -i.bak -E 's/\t/ /' file.txt
Run Code Online (Sandbox Code Playgroud)
它不是替换制表符,而是替换t字符。我已经尝试了我能想到的所有变体,玩引用等。我在谷歌上搜索并发现其他人都使用非常相似的表达方式,他们似乎对他们有用。
这-E是 OS X 的东西。我认为失败可能是 OS X 的一些奇怪怪癖的结果sed,所以我也用 Ruby 尝试了它(没有-i),并得到了相同的结果:
ruby -pe '$_.gsub!(/\t/," ")' < file.txt > file.new
Run Code Online (Sandbox Code Playgroud)
我在 OS X 和 iTerm 上使用 Bash 3.2.51,尽管我看不出其中任何一个是如何非常相关的。我没有设置任何奇怪的环境变量,但我可以发布您认为可能相关的任何环境变量。
可能有什么问题?
更新:当我尝试 Ruby 版本时,我一定犯了一些其他错误或错字,因为 Gilles 指出它确实有效(而且我从来没有让他误导我!)。我不确定发生了什么,但我很确定这一定是我的错误。
我正在从 Git for Windows 附带的 bash shell 切换到 Cygwin,但遇到了一个奇怪的问题。有人认为添加/cygdrive/到所有路径是个好主意,而我认为这是一个非常丑陋的主意。我已经能够确定我可以通过添加部分解决这个问题
mount --change-cygdrive-prefix /
export HOME=/c/Users/BZISAD0
Run Code Online (Sandbox Code Playgroud)
在我的 .bashrc 中,但如果我查看 PATH 变量,所有内容中仍然包含 /cygdrive/。我想我可以编写一个脚本来修复 PATH 但这比我已经在做的更麻烦。我们有了一个更好的办法,我敢确信那里是因为Git的bash shell中使用(据我所知)旧版本的Cygwin,它以某种方式配置为不前插/cygdrive无处不在。那么,如何将“Suck”旋钮调为零?

Unix的系统管理员那里我的工作是不愿意给我访问我的登录shell从改变ksh到bash。他给出了各种借口,最有趣的是因为他们编写了所有脚本,ksh因为如果我尝试运行它们,它们将无法工作。我不知道他从哪里得到这些想法,但既然我无法说服他,我还有其他选择吗?
(chsh安装在这些机器上,但我们使用公钥/私钥对登录,我没有任何密码,所以当chsh提示我输入密码时,我没有什么可以提供的。)
在我的测试中(在 Bash 和 Z Shell 中),我发现定义函数或别名或名称中带有连字符的可执行 shell 脚本没有任何问题,但我不确定这在所有 shell 和所有用例中都没有问题.
我想这样做的原因是连字符比下划线更容易输入,因此更快更流畅。
我不愿相信这不是问题的一个原因是,在某些语言(例如 Ruby)中,即使没有空格,连字符也会被解释为减号。如果在某些 shell 中可能发生这样的事情,我不会感到惊讶,即使没有空格,连字符也被解释为表示选项。
我有点怀疑的另一个原因是我的文本编辑器搞砸了带有连字符的函数的语法突出显示。(当然,这完全有可能只是 shell 脚本的语法高亮配置中的一个错误。)
有什么理由避免使用连字符吗?
我正在尝试在 Linux 服务器上的主目录中安装 Ruby(没有 root 访问权限),这当然需要使用gcc. 我能找到的最接近的是该名称的目录(如果你足够深入)包含cc1:
>: find / -iname gcc 2> /dev/null
/usr/libexec/gcc
>: tree -if /usr/libexec/gcc
/usr/libexec/gcc
/usr/libexec/gcc/x86_64-redhat-linux
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1/cc1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.2 -> 4.1.1
Run Code Online (Sandbox Code Playgroud)
CC1 在维基百科上重定向到 GCC的事实似乎暗示着某种接近身份的东西,但是除了关于重定向的说明之外,GCC 页面上没有其他提及 CC1,而且谷歌搜索没有给我任何有用的东西,我尝试cc1在gcc失败的地方。
他们之间究竟是什么关系?它是否让我有希望在这台机器上编译 Ruby?
是否有可能做到这一点:
ssh user@socket command /path/to/file/on/local/machine
也就是说,我想一步使用本地文件执行远程命令,而不是先使用scp复制文件。
出于某种原因,Vim 认为我所有的评论都应该删除所有缩进。如果我添加#到一行的开头,突然所有前导空格都被删除。我怎么能阻止这个?
我安装了 Janus 和 NERDtree,以防万一,以及我的.vimrc.