在zsh,我想拥有无限的历史。我设置HISTSIZE=,在bash. 现在我导入一个旧的历史
mv old_history .history
Run Code Online (Sandbox Code Playgroud)
这是相当大
wc -l .history
43562 .history
Run Code Online (Sandbox Code Playgroud)
如果我现在关闭并重新开始zsh,我会看到
wc -l .history
32234 .history
Run Code Online (Sandbox Code Playgroud)
我不能有无限的历史记录zsh吗?
Bash有PROMPT_DIRTRIM选项,例如当我设置时PROMPT_DIRTRIM=3,然后是一条长路径,如:
user@computer: /this/is/some/silly/path
Run Code Online (Sandbox Code Playgroud)
将显示为:
user@computer: .../some/silly/path
Run Code Online (Sandbox Code Playgroud)
是否存在类似的选项zsh?
我正在使用rsync备份我的主目录。这已经工作了很长时间了。这是我正在使用的命令:
rsync \
-pavz \
--delete \
--exclude 'mnt/' \
--exclude '.cache/' \
--exclude 'Videos/' \
--exclude 'Music/' \
--exclude 'Documents/virtualbox' \
/home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"
Run Code Online (Sandbox Code Playgroud)
但是,我切换了要备份的服务器,现在rsync启动并运行几秒钟(最多几分钟),但随后停止并显示错误消息
packet_write_wait: Connection to x.x.x.x: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.1]
Run Code Online (Sandbox Code Playgroud)
由于它在其他服务器上工作,我怀疑问题出在连接或服务器本身上。连接似乎很稳定。我通过电缆连接,我没有看到任何中断。我还尝试在备份时 ping 服务器。即使备份中断,ping 的响应率为 100%。
我kerberos用来在远程服务器上进行身份验证。
我试着用几个组合ServerAliveInterval,ServerAliveCountMax或ClientAliveInterval在我~/.ssh/config,但无济于事。
可能是服务器上运行的某些东西rsync出于某种原因终止了该命令,但我不知道如何进行调查。有任何想法吗?
在zshin 中vim mode,我写了一些东西
foo foo bar bar
Run Code Online (Sandbox Code Playgroud)
然后我点击Esc进入正常模式并输入 :
foo foo bar bar
execute: _
Run Code Online (Sandbox Code Playgroud)
然后,我假设我可以做到这一点,我想搜索并替换bar为baz
foo foo bar bar
execute: s/bar/baz/g_
Run Code Online (Sandbox Code Playgroud)
然后我尝试按 Enter 键,但这不起作用。我只能从execute使用Ctrl+ 返回c。
如何执行命令?
我用我的正常人试过这个,根本.zshrc没有.zshrc。
我正在使用stderred将所有流式传输到 stderr 的输出着色为红色。它工作正常。但是,当我编写自己的 bash 脚本并使用 抛出错误时echo 'error' 1>&2,它不会将输出着色为红色。我认为这是因为该命令只是将输出重定向到 stderr 文件描述符指向的任何地方,但没有正确地将消息标记为属于 stderr。是这样吗?如何在 bash 中正确写入 stderr?
我尝试登录到仅支持使用 kerberos 身份验证登录的服务器。这是我的尝试:
kinit user@FOO.ORG
aklog -c foo.org
ssh server
Run Code Online (Sandbox Code Playgroud)
但后来我又被要求输入密码。
这是我在~/.ssh/config条目中的内容server(我的/etc/ssh/ssh_config是空的):
Host server
HostName someserver.foo.org
User user
ForwardX11 yes
ForwardX11Trusted yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
Run Code Online (Sandbox Code Playgroud)
据同事说,这(或类似的东西)对他们有用。我可以用 kerberos 令牌登录到其他机器上就好了。我认为它与我的/etc/krb5.conf,但我不知道要寻找什么。我尝试/etc/krb5.conf从服务器复制到我的工作站,但没有成功。
如果我运行,这是输出的一部分ssh -vvv server:
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
Server not found in Kerberos database
debug1: Unspecified GSS failure. Minor code may provide more information
Server not found in Kerberos …Run Code Online (Sandbox Code Playgroud) 我在 Debian Jessie 上。当我打开一个新的文本文件mousepad并保存它,然后修改它vim并再次保存它时,我无法再打印或grep它的内容了。
如果我这样做cat file,终端中不会显示任何内容。如果我file用vim或打开mousepad,我会看到内容。如果我用 写入文件vim,状态行中会显示以下内容:
"file" [mac] 2L, 5C written
Run Code Online (Sandbox Code Playgroud)
而对于“普通”文件,我只得到
"file" 2L, 5C written
Run Code Online (Sandbox Code Playgroud)
我认为这[mac]与新行的格式有关,所以我尝试运行:
dos2unix file
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在。有谁知道文件到底有什么问题?
要终止挂起的作业,我使用Ctrl+c向挂起的作业发送中断信号。有时这不会停止工作,至少不会立即停止。然后我可以使用Ctrl+z暂停作业,然后用kill %1(或任何作业编号)终止它。
为什么+在干扰工作方面比Ctrl+z更强大?有时,甚至+ 都不起作用。在这种情况下是否可以使用其他组合键?CtrlcCtrlz
我试过了stty -a,但列出的其他组合键都没有为我做任何事情。
我有一个功能
f(){
echo 777
}
Run Code Online (Sandbox Code Playgroud)
和一个变量,我将函数的“返回值”分配给它。
x=$(f)
Run Code Online (Sandbox Code Playgroud)
非常简洁!然而,在我的实际代码中,变量名和函数名要长得多,而且函数也吃位置参数,所以上面的简洁行变得很长。因为我喜欢保持整洁,所以我想把上面的代码分成两行。
x=\
$(f)
Run Code Online (Sandbox Code Playgroud)
仍然有效!但是:保持整洁也意味着尊重缩进,这样就可以得到类似的东西
if foo
x=\
$(f)
fi
Run Code Online (Sandbox Code Playgroud)
由于空格而不再起作用!有什么好的解决方法吗?
我有一个 USB 驱动器,我用它来格式化
sudo mkfs.vfat -I /dev/sdb1
Run Code Online (Sandbox Code Playgroud)
当我查看带有 的 USB 驱动器的大小时df -h,它报告它的大小为 64 MB,但它应该是 8 GB。我究竟做错了什么?
fdisk -l /dev/sdb1 给
Disk /dev/sdb1: 67 MB, 67108864 bytes
241 heads, 62 sectors/track, 8 cylinders, total 131072 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
Run Code Online (Sandbox Code Playgroud) 我在我们的服务器上没有 root 权限,但我想安装tig. 下载源码并运行
./configure --prefix=$HOME/pkg\nRun Code Online (Sandbox Code Playgroud)\n\n给我
\n\nconfigure: error: ncurses not found\nRun Code Online (Sandbox Code Playgroud)\n\n好吧,ncurses-devel也没安装。安装ncurses工作正常。但是我如何告诉./configure现在ncurses安装在我的$HOME目录中的脚本呢?通常这适用于类似的东西
PKG_CONFIG_PATH=$HOME/pkg/include ./configure --prefix=$HOME/pkg\nC_INCLUDE_PATH=$HOME/pkg/include/ncurses make\nRun Code Online (Sandbox Code Playgroud)\n\n但对于tig,这不起作用,./configure仍然会引发相同的错误。我怎样才能知道tig在哪里可以找到ncurses?
当然,我可以在./configure步骤中跳过这一部分,但在制作时会出现这些错误git:
/home/foo/pkg/include/ncurses/curses.h: In function \xe2\x80\x98NCURSES_EXPORT_VAR\xe2\x80\x99:\n/home/foo/pkg/include/ncurses/curses.h:274: error: expected declaration specifiers before \xe2\x80\x98acs_map\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n 在zsh,我做了一个符号链接
$ ln -s ~/Documents symboliclink
Run Code Online (Sandbox Code Playgroud)
然后我想知道这个符号链接里面有什么。
$ ls -l symboliclink
> lrwxrwxrwx 1 user user 21 Oct 10 15:56 symboliclink -> /home/user/Documents
Run Code Online (Sandbox Code Playgroud)
这仅显示符号链接,而不显示其中的内容。如果我ls只使用,它会列出内容,但如果我使用-l标志,它不会。这bash对 forls和ls -l. 我怎样才能得到这种行为zsh?
假设我有一个变量,我想在将其乘以 1000 后打印 5 位有效数字。zsh可以这样做:
zsh$ x=2.8026407e+00
zsh$ printf "%.5g\n" "$(( 1000*${x} ))"
zsh> 2802.6
Run Code Online (Sandbox Code Playgroud)
bash也能做到吗?
bash$ x=2.8026407e+00
bash$ printf "%.5g\n" "$(( 1000*${x} ))"
bash> bash: 1000*2.8026407e+00 : syntax error: invalid arithmetic operator (error token is ".8026407e+00 ")
Run Code Online (Sandbox Code Playgroud)
我认为没有办法让原生 bash 理解浮点运算,是吗?我知道我可以使用 eg awk,但我想知道是否bash可以这样做。
(我并不惊讶bash不能处理浮动,但zsh可以!)