小编Ser*_*nyy的帖子

是否 cd 。有没有用?

我一直在关注的教程之一简要说明cd .没有用。当尝试复制符号链接递归中OP 显示的问题时- 是什么让它“重置”?,我也尝试过cd .,它显示出与 OP 描述的相同效果(增长$PWD变量),可以用cd -P.

这让我想知道,有没有人实际上想要使用的情况cd .

cd-command

102
推荐指数
7
解决办法
2万
查看次数

Shell 语法:如何正确使用 \ 来换行?

我曾经相信打破列表中线条的适当方法是

command1 && \
command2
Run Code Online (Sandbox Code Playgroud)

原来不是这样,一个不需要 \

$ [  $(id -u) -eq 1000  ] &&                                                   
> echo yes
yes
Run Code Online (Sandbox Code Playgroud)

|以同样的方式处理管道。

关于流水线和列表的 bash 手册页部分没有对此进行任何说明。因此,我的问题是:\打破长行的正确用法是什么?

bash shell-script

78
推荐指数
2
解决办法
16万
查看次数

Linux 和 BSD 中的常见程序(例如:“ls”、“cat”)是否来自相同的源代码?

Linux 和 BSD 都有像lsandcatechoand 之类的通用程序kill

它们来自相同的源代码,还是 Linux 和 BSD 都拥有这些程序的独特源代码?

linux source bsd

25
推荐指数
3
解决办法
4260
查看次数

Linux/xBSD 在 GRUB 之前是如何引导的?

根据维基百科,GRUB 于 1995 年发布。那时 Linux 和 xBSD 已经存在了好几年。我知道早期的 Unix 版本在 70 年代和 80 年代与硬件相关联,但 Linux 和 xBSD 可以免费分发和安装。这就引出了一个问题,那时您将如何引导 Linux?发行版是否带有自己的引导加载程序实现?

boot-loader history

22
推荐指数
4
解决办法
7329
查看次数

为什么 ${$#} 在 shell 中返回与 $$ 相同的结果?

在尝试在 中设置最后一个位置参数时/bin/dash,我尝试了echo ${$#}. 令人惊讶的是,这并没有导致错误,而是进入了与$$变量内容相同的 PID 。问题是,为什么这种语法有效?shell 在这里应用的语法规则是什么?

基本上,我所做的是

$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Run Code Online (Sandbox Code Playgroud)

显然,%在这样的构造中,字符也会被忽略

$ echo ${$%}
13819
Run Code Online (Sandbox Code Playgroud)

但是*@导致错误的替换错误:

$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
Run Code Online (Sandbox Code Playgroud)

shell variable

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

在 shell 脚本中的 while 和 do 之间

我有以下脚本可以正常工作:

!/bin/bash

a=12
while [ $a -gt 10 ]
do
    echo "$a"
    a=$(($a-1))
done
echo "done"
Run Code Online (Sandbox Code Playgroud)

如果我在“do”上方添加“echo something”行,我希望在该行中看到语法错误。好像[ $a -gt 10 ]绕过了,就变成无限循环了。怎么会这样?

linux shell shell-script

15
推荐指数
2
解决办法
1924
查看次数

如何导致“参数列表太长”错误?

问题的上下文:根据POSIX 规范, ARG_MAX 是函数系列的命令行参数的最大长度exec()。这让我相信这是实际的参数数量,但这显然不起作用:

$ ulimit -s
8192
$ touch {1..18000}.jpg
$ rm *.jpg
$ 
Run Code Online (Sandbox Code Playgroud)

显然,尽管长度超过 8192 个项目,但效果很好。根据DW 的回答8192应该以 kB 为单位的大小。很明显,之前的假设是错误的。

这是实际的问题进来:我如何找出项目的实际金额获得上述8192 KB的限制?换句话说,我必须执行什么样的计算才能确保这种*.jpg类型的 glob 会导致Argument list too long错误?

请注意,这不是What 定义单个命令参数的最大大小的副本。我知道getconf ARG_MAXulimit -s价值观,这不是我的问题。我需要知道如何生成大小超过 limit 的足够多的参数。换句话说,我需要找到一种方法来获取错误,而不是避免它。

command-line shell ulimit

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

在文件中指定行的开头插入字符

我需要在文本文件中指定行的开头插入字符 (#)。

输入示例:

Hellow1
Hellow2
Hellow3
Run Code Online (Sandbox Code Playgroud)

期望输出

Hellow1
#Hellow2
Hellow3
Run Code Online (Sandbox Code Playgroud)

text-processing

13
推荐指数
2
解决办法
4万
查看次数

删除条目后,为什么包含大量条目的目录不会缩小?

关闭投票通知:虽然链接的副本提出了相同的问题,但评论和唯一答案并未提供来自权威来源的答案。在由托马斯·迪基我的问题的答案,事实上确实提供我一直在寻求答案。因此,建议的重复没有帮助,但是托马斯在这里的回答是正确的。

根据G-Man在这个 PerlDuck 的评论中对超级用户问题和个人帐户的回答,具有大量条目的目录大小超过 4096 字节(可以通过ls -l输出看到),但是一旦条目被删除 -数字永远不会下降。

问题是“为什么”?是否由于ext4文件系统配置为保留目录元数据的方式?显然,删除目录并重新创建它不是解决方案,因为它会删除原始 inode 并创建一个新的 inode。可以做些什么来手动减少数量?

directory ext4 inode

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

为什么大括号命令组在 POSIX Shell 语法中的左大括号后需要空格?

TL;DR:为什么 POSIX 括号组在{保留字后需要空格,而子外壳在保留字后不需要(

POSIX shell 语法定义花括号组和子shell如下

brace_group      : Lbrace compound_list Rbrace

subshell         : '(' compound_list ')'
Run Code Online (Sandbox Code Playgroud)

现在,如果我们从字面上看,空格很重要。这意味着必须有空间描述开始和结束括号和括号,如

{ echo hello world; }

( echo hello world )
Run Code Online (Sandbox Code Playgroud)

这也符合复合命令定义

这些复合命令中的每一个在开头都有一个保留字或控制运算符,并在末尾有一个相应的终止符保留字或运算符。

然而,没有意义的是为什么(list)并且( list )工作得很好((不需要后面的空格),但是大括号扩展必须有一个前导空格,即{echo hello;}不起作用。

当然,保留字被视为 shell 字是有意义的,之后需要一个空格来与字段拆分的概念保持一致,但是定义本身并没有提到空格。此外,如果{(都被复合命令的 POSIX 定义视为保留字,为什么在这些保留字之后的空格字符方面对它们的处理方式不同?现在,ksh(1)手册确实说明:

作为字符序列的单词由不带引号的空白字符(空格、制表符和换行符)或元字符(<、>、|、;、&、(和))分隔

换句话说,它是有道理的ksh的将认识到(作为字符,其中第一字将是一个命令或变量赋值。POSIX,但是似乎没有提到(作为元字符。就 POSIX 语法而言,我发现的唯一可能的解释是它{被认为是一个“标记”,而 as(没有被列为一个。

/* These are reserved words, not …
Run Code Online (Sandbox Code Playgroud)

shell posix subshell syntax

12
推荐指数
2
解决办法
747
查看次数