小编pfn*_*sel的帖子

zsh 中的无限历史记录

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吗?

command-history zsh

82
推荐指数
4
解决办法
6万
查看次数

在 zsh 提示符下缩短路径

BashPROMPT_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

prompt zsh

29
推荐指数
3
解决办法
2万
查看次数

rsync 不断断开连接:管道损坏

我正在使用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用来在远程服务器上进行身份验证。

我试着用几个组合ServerAliveIntervalServerAliveCountMaxClientAliveInterval在我~/.ssh/config,但无济于事。

可能是服务器上运行的某些东西rsync出于某种原因终止了该命令,但我不知道如何进行调查。有任何想法吗?

networking ssh backup rsync

14
推荐指数
3
解决办法
4万
查看次数

在 zsh vim 模式下执行命令

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)

然后,我假设我可以做到这一点,我想搜索并替换barbaz

foo foo bar bar
execute: s/bar/baz/g_
Run Code Online (Sandbox Code Playgroud)

然后我尝试按 Enter 键,但这不起作用。我只能从execute使用Ctrl+ 返回c

如何执行命令?

我用我的正常人试过这个,根本.zshrc没有.zshrc

vim zsh

13
推荐指数
1
解决办法
5291
查看次数

写入标准错误

我正在使用stderred将所有流式传输到 stderr 的输出着色为红色。它工作正常。但是,当我编写自己的 bash 脚本并使用 抛出错误时echo 'error' 1>&2,它不会将输出着色为红色。我认为这是因为该命令只是将输出重定向到 stderr 文件描述符指向的任何地方,但没有正确地将消息标记为属于 stderr。是这样吗?如何在 bash 中正确写入 stderr?

bash stderr

6
推荐指数
1
解决办法
2万
查看次数

使用 kerberos 无需密码的 SSH 登录

我尝试登录到仅支持使用 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)

ssh authentication kerberos

6
推荐指数
1
解决办法
1万
查看次数

无法 cat 或 grep 文件的内容

我在 Debian Jessie 上。当我打开一个新的文本文件mousepad并保存它,然后修改它vim并再次保存它时,我无法再打印或grep它的内容了。

如果我这样做cat file,终端中不会显示任何内容。如果我filevim或打开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)

但问题仍然存在。有谁知道文件到底有什么问题?

files text newlines

5
推荐指数
1
解决办法
935
查看次数

Ctrl+c 和 Ctrl+z 中断/暂停作业

要终止挂起的作业,我使用Ctrl+c向挂起的作业发送中断信号。有时这不会停止工作,至少不会立即停止。然后我可以使用Ctrl+z暂停作业,然后用kill %1(或任何作业编号)终止它。

为什么+在干扰工作方面比Ctrl+z更强大?有时,甚至+ 都不起作用。在这种情况下是否可以使用其他组合键?CtrlcCtrlz

我试过了stty -a,但列出的其他组合键都没有为我做任何事情。

shell terminal signals interrupt

5
推荐指数
1
解决办法
4703
查看次数

使用多行分配变量

我有一个功能

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)

由于空格而不再起作用!有什么好的解决方法吗?

bash newlines assignment

4
推荐指数
1
解决办法
1597
查看次数

格式化 U 盘

我有一个 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)

partition usb disk-usage mkfs

3
推荐指数
1
解决办法
457
查看次数

在没有 root 权限的情况下安装 tig 和 ncurses

我在我们的服务器上没有 root 权限,但我想安装tig. 下载源码并运行

\n\n
./configure --prefix=$HOME/pkg\n
Run Code Online (Sandbox Code Playgroud)\n\n

给我

\n\n
configure: error: ncurses not found\n
Run Code Online (Sandbox Code Playgroud)\n\n

好吧,ncurses-devel也没安装。安装ncurses工作正常。但是我如何告诉./configure现在ncurses安装在我的$HOME目录中的脚本呢?通常这适用于类似的东西

\n\n
PKG_CONFIG_PATH=$HOME/pkg/include ./configure --prefix=$HOME/pkg\nC_INCLUDE_PATH=$HOME/pkg/include/ncurses make\n
Run Code Online (Sandbox Code Playgroud)\n\n

但对于tig,这不起作用,./configure仍然会引发相同的错误。我怎样才能知道tig在哪里可以找到ncurses

\n\n

当然,我可以在./configure步骤中跳过这一部分,但在制作时会出现这些错误git

\n\n
/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\n
Run Code Online (Sandbox Code Playgroud)\n

ncurses software-installation

2
推荐指数
1
解决办法
3050
查看次数

显示符号链接的内容

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对 forlsls -l. 我怎样才能得到这种行为zsh

ls zsh symlink

2
推荐指数
3
解决办法
5079
查看次数

bash 中的浮点数

假设我有一个变量,我想在将其乘以 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可以!)

bash zsh floating-point

1
推荐指数
1
解决办法
8651
查看次数