有时,终端屏幕会乱七八糟,当我们使用man ls
阅读手册页,或按向上箭头转到历史记录中的前一命令时,屏幕会显示不正确的字符。(例如,将屏幕的结尾视为屏幕中间的某个位置)。
该命令reset
已尝试,但不起作用。一种有效的方法是注销或关闭窗口,然后先调整窗口大小,然后执行ssh
(或关闭该选项卡,调整窗口大小,然后打开一个新选项卡以获取新外壳)。
但是这样一来,我们之前做的任何事情都会丢失,比如启动虚拟机控制台等,那么如果不关闭shell,有没有办法解决这个问题呢?
(这发生在 Fedora 内部,也发生在 Macbookssh
到 RHEL 5.4 盒子中)。
更新:我现在记得它是如何在 Fedora 中发生的:我打开了一个终端,并做了一个 FreeVM 来使用虚拟机(外壳)的控制台。我认为它的大小是 80 x 25,然后过了一会儿,我将终端的大小调整为大约 130 x 50,然后(VM 的)“内壳”开始表现得很奇怪。
sftp
昨天我可以在RHEL 5.4 box (RedHat) 上做,今天我不能。
消息是"Received message too long 778199411"
,经过一些调查,这是由于我的 RHEL 盒子.bashrc
有一条线echo "running .bashrc"
- 或者我认为根本没有回声。
那么为什么打印出一行会影响sftp
?感觉有点像设计问题,因为.bashrc
在其他情况下(例如登录或)打印出工作中的一行,ssh
并且在sftp
由于这种奇怪的原因失败时很难追踪。
所以问题是,为什么打印出一行会导致这样的错误,如果我们仍然喜欢打印出一些东西.bashrc
怎么办?(主要是查看此文件何时获得/执行)。
我的公司在 Linux 机器上有 RedHat RHEL 5.4,我需要在其上安装 Meld。怎么做到呢?
$ sudo yum install meld
No package meld available.
Nothing to do
$ sudo yum search meld
No Matches found
Run Code Online (Sandbox Code Playgroud)
网站http://meldmerge.org/有下载,但没有关于如何安装它的说明,网站http://pkgs.repoforge.org/meld/有meld-1.1.5-1.el5.rf.noarch.rpm
并且meld-1.1.5-1.rf.src.rpm
它们是用于 RHEL 的5.4(不是那个src
?)以及如何安装它——是通过使用rpm
吗?你能在命令行上给出确切的行吗?谢谢。
我正在尝试做类似的事情
alias ftp='echo do not use ftp. Use sftp instead.'
Run Code Online (Sandbox Code Playgroud)
只是为了ftp
不会被意外使用。但我注意到
ftp abcd.com
Run Code Online (Sandbox Code Playgroud)
将导致命令回显
do not use ftp. Use sftp instead. abcd.com
Run Code Online (Sandbox Code Playgroud)
因为abcd.com
被认为是 的参数echo
。
有没有办法让 Bash 不添加abcd.com
到替换中,或者echo
不将其作为额外的参数?(每种方法都有解决方案吗?)
我以为我能做到
alias ftp='sftp'
Run Code Online (Sandbox Code Playgroud)
但我只想让命令全部停止以提醒自己不要使用ftp
.
几天前,我有一个终端选项卡在做ssh
,另一个在本地做很多工作。然后我重新启动了机器(在带有 Mavericks 的 Mac 上)。
当我再次运行终端时,我发现第二个选项卡的所有命令历史记录都不存在。只有ssh
命令。
然后我搜索了如何以某种方式“合并”历史记录,发现我们需要shopt -s histappend
在我们的~/.bashrc
文件中做一个,以便历史记录将追加,而不是“覆盖”——我们不希望一组历史记录覆盖另一组放; 我们要追加。
但是,当我转到 OS X Yosemite 框并使用 时shopt
,我看到它histappend
已关闭,但是当我打开两个选项卡,一个执行echo abc
另一个执行echo def
并退出它们时,我再次重新打开终端并发出history
命令,并且看到了echo abc
和echo def
命令。
然后我在 VirtualBox 上运行 Ubuntu 2014-10 并做了类似的事情,并且仍然看到两个历史记录(我首先shopt -u histappend
在两个 Bash 中运行以先将选项设置为关闭)。
那么究竟是什么机制在这样做呢?那么histappend
就没有意义了,是开还是关都无所谓?
我还在shopt -s histappend
我的.bashrc
终端中注释掉并重新启动并再次尝试,并看到两个选项卡的历史能够组合......所以这真的很奇怪,是什么导致了它?
我试图查看 O'Reilly 关于 Unix 和 Bash 的一些参考资料,*/
但找不到任何参考资料。我们可以echo */
看到所有的目录。
好像只表示所有“目录”,而*
表示“所有文件和目录”,但不知为何,很多用户似乎不知道,书籍也没有提到。
是否有明确的来源谈论什么*/
意味着及其变化?
在 Mac OS X 上,现在我使用以下命令将一个小项目文件夹备份到 USB 闪存驱动器:
alias a='alias'
a dateseq='date "+%Y-%m-%d %H:%M:%S"'
a backup_proj='cp -a ~/code/MyProj "/Volumes/KINGSTON/MyProj `dateseq`"
Run Code Online (Sandbox Code Playgroud)
所以每次输入backup_proj
,文件夹都会从硬盘备份到U盘,每个项目也是内部使用Git进行版本控制。每个文件夹只有大约500kb,所以即使填满1GB(闪存盘是16GB)也需要很长时间。该文件夹备份为:
$ ls -1 /Volumes/KINGSTON/
MyProj 2012-05-27 08:20:50/
MyProj 2012-05-27 10:27:56/
MyProj 2012-05-27 14:53:01/
Run Code Online (Sandbox Code Playgroud)
但我很偏执,也想备份到 Google Drive 或 Dropbox,这样它就会自动上传到他们的服务器,只需加密整个文件夹并将单个结果文件复制到 Google Drive 或 DropBox 的文件夹,密码可以是apple234321pineapple
和在命令行中指定。我想知道有什么好方法可以将文件夹加密为单个文件,以便破解需要非实际时间?(能否请您提供可以执行此操作的命令行)。
Bash 和 Zsh 的 HEREDOC 似乎像一个文件,而不是字符串,如果我希望做类似的事情
foo() {
ruby << 'EOF'
3.times do
puts "Ruby is getting the argument #{ARGV[0]}"
end
EOF
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将参数传递给 Ruby 程序?最好不要将 插入$1
到 Ruby 代码中,这就是我使用'EOF'
代替 的原因EOF
,因为插入到 Ruby 代码中可能会很麻烦。
有一种方法可以将 HEREDOC 用作字符串,方法如下:
foo() {
ruby -e "$(cat << 'EOF'
3.times do
puts "Ruby is getting the argument #{ARGV[0]}"
end
EOF
)" $1
}
Run Code Online (Sandbox Code Playgroud)
它有效(虽然有点hacky)。但是有没有一种方法可以使用HEREDOC 的通常方式将其视为文件并能够向Ruby 提供参数?
以下是否显示正在使用两个版本的内核?(是粗体 - 包含在**
显示当前加载/使用的内容中的那个)。基本上,我只是在 Macbook Pro 上使用 VMWare Fusion 创建了一个 VM,下载了 Fedora(当前版本为 17),安装并进行了升级,它提示我在一个窗口中进行。
(我看到的那些是kernel.x86_64 3.3.4-5.fc17和
kernel.x86_64 3.6.10-2.fc17,所以3.3.4和3.6.10都在运行?为什么其他内核部分一样headers
,modules
或tools
不需要跑步?)
$ yum list kernel-*
Loaded plugins: langpacks, presto, refresh-packagekit
(1/2): fedora/primary_db | 14 MB 00:13
(2/2): updates/primary_db | 7.3 MB 00:06
Installed Packages
**kernel.x86_64** 3.3.4-5.fc17 @koji-override-0/$releasever
**kernel.x86_64** 3.6.10-2.fc17 @updates
Available Packages
kernel-debug.x86_64 3.6.10-2.fc17 updates
kernel-debug-devel.x86_64 3.6.10-2.fc17 updates
kernel-debug-modules-extra.x86_64 3.6.10-2.fc17 updates
kernel-devel.x86_64 3.6.10-2.fc17 updates
kernel-doc.noarch 3.6.10-2.fc17 updates
kernel-headers.x86_64 3.6.10-2.fc17 updates
kernel-modules-extra.x86_64 3.6.10-2.fc17 updates
kernel-tools.i686 3.3.4-5.fc17 fedora …
Run Code Online (Sandbox Code Playgroud) 要查找所有包含该单词的文件foo
以及其中包含该单词的文件bar
,我们可以使用
grep -Ilri foo . | xargs grep -i bar
Run Code Online (Sandbox Code Playgroud)
(不区分大小写并排除二进制文件)...但是,如果文件路径类似于
/Users/myusername/Text Files
那么它就不起作用了,因为现在该xargs
部分变成了
grep -i bar /Users/myusername/Text Files
Run Code Online (Sandbox Code Playgroud)
但实际上它需要是
grep -i bar "/Users/myusername/Text Files"
Run Code Online (Sandbox Code Playgroud)
或者
grep -i bar /Users/myusername/Text\ Files
Run Code Online (Sandbox Code Playgroud)
如何让它发挥作用?(在 macOS Monterey 上)。