小编Ame*_*ina的帖子

文件夹权限中的大写 S

S下面的字母是什么意思?有问题的文件是一个文件夹。

                                                                在此处输入图片说明

在这里读到大写S可以表示该setgid位对于二进制可执行文件处于活动状态。但这是一个文件夹。这是否仍然意味着该setgid位已为其激活?如果是这样,那意味着什么?

permissions

57
推荐指数
3
解决办法
7万
查看次数

如何在 zsh 中正确收集一系列行

我认为以下内容会将 的输出分组为my_command一组行:

IFS='\n' array_of_lines=$(my_command);
Run Code Online (Sandbox Code Playgroud)

使得$array_of_lines[1]要提到的第一行中的输出my_command$array_of_lines[2]以在第二,等等。

但是,上面的命令似乎效果不佳。它似乎也分割了my_command字符周围的输出n,正如我已经检查过的那样print -l $array_of_lines,我相信它会逐行打印数组的元素。我还检查了这一点:

echo $array_of_lines[1]
echo $array_of_lines[2]
...
Run Code Online (Sandbox Code Playgroud)

在第二次尝试中,我认为添加eval可能会有所帮助:

IFS='\n' array_of_lines=$(eval my_command);
Run Code Online (Sandbox Code Playgroud)

但我得到了与没有它完全相同的结果。

最后,按照在 zsh 中带有空格的 List 元素上的答案,我还尝试使用参数扩展标志而不是IFS告诉 zsh 如何拆分输入并将元素收集到数组中,即:

array_of_lines=("${(@f)$(my_command)}");
Run Code Online (Sandbox Code Playgroud)

但我仍然得到相同的结果(分裂发生在n

有了这个,我有以下问题:

一季度。在行数组中收集命令输出的“正确”方法是什么?

Q2。如何指定IFS仅在换行符上拆分?

Q3。如果我在上面的第三次尝试中使用参数扩展标志(即使用@f)来指定拆分,那么 zsh 会忽略 的值IFS吗?为什么上面不起作用?

zsh shell-script

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

unix shell 脚本的文件扩展名

在维基百科上,.sh的文章说:

有关 .sh 文件扩展名类型,请参阅Bourne shell

其他unix shell怎么样?

我知道在文件中 使用shebang来指示要执行的解释器,但我想知道:

  • 文件扩展名与无文件扩展名的优缺点是什么?

scripting conventions shell-script filenames files

54
推荐指数
5
解决办法
12万
查看次数

Tmux 不采购我的 .tmux.conf

我在本地安装了 tmux(没有 root 权限)。我还在.tmux.conf我的主目录中使用以下几行创建了我的文件:

unbind-key C-b
set -g prefix C-o
bind-key C-o send-prefix
Run Code Online (Sandbox Code Playgroud)

但是,tmux似乎没有采购此文件(我的绑定密钥仍然是C-b)。我尝试关闭并重新打开我的 ssh 会话(这是在远程机器上),但没有成功。

会发生什么?

tmux

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

如何在 ack 和 grep 中进行最大深度搜索?

有没有办法告诉ack只搜索当前文件夹上的文本?(或指定一个max-depth级别?)和grep

grep ack

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

解析符号链接 (pwd)

假设我执行以下操作:

cd /some/path
ln -s /target/path symbolic_name
Run Code Online (Sandbox Code Playgroud)

如果那么做:

cd /some/path
cd symbolic_name
pwd
Run Code Online (Sandbox Code Playgroud)

我得到:

/some/path/symblic_name
Run Code Online (Sandbox Code Playgroud)

并不是:

/target/path
Run Code Online (Sandbox Code Playgroud)

有没有办法让shell“完全解析”一个符号链接(即更新CWD等),就好像我已经直接做了:

cd /target/path
Run Code Online (Sandbox Code Playgroud)

?

我需要运行一些似乎“知道”或“敏感”我如何到达目标路径的程序,我希望他们认为我到达目标路径就像cd /target/path直接完成一样。

symlink files cwd

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

: ${param:=value} 是什么意思?

我在A User's Guide to the Z-Shell 中阅读了以下内容:

'true' 的同义词是 ':'; 它经常以这种形式用于给出有副作用但不应该使用的参数——比如

: ${param:=value}
Run Code Online (Sandbox Code Playgroud)

这是所有 Bourne shell 衍生物中的常见习语。在参数扩展中,$param如果之前为空则给定值 value,否则不理会。由于这是参数扩展的唯一原因,因此您:习惯于忽略该参数。实际上,shell 轻松地构建了命令行——冒号,后跟任何值$param,无论赋值是否发生——然后执行命令;碰巧 ':' 没有注意到它给出的参数。

但我不明白。我明白这:意味着true,但表达式中有两个冒号。作为一个小问题,为什么这个习语在所有 Bourne shell 衍生物中使用得如此之多?它的目的是什么?

注意: 我对这个习语在bashzsh 中的作用很感兴趣。

谢谢

shell bash zsh

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

如何grep反向匹配并排除“之前”和“之后”行

考虑一个包含以下条目的文本文件:

aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
Run Code Online (Sandbox Code Playgroud)

给定一个模式(例如fff),我想对上面的文件进行 grep 以获取输出:

all_lines except (pattern_matching_lines  U (B lines_before) U (A lines_after))
Run Code Online (Sandbox Code Playgroud)

例如,如果B = 2A = 1,带有模式 = 的输出fff应该是:

aaa
bbb
ccc
hhh
iii
Run Code Online (Sandbox Code Playgroud)

如何使用 grep 或其他命令行工具执行此操作?


请注意,当我尝试时:

grep -v 'fff'  -A1 -B2 file.txt
Run Code Online (Sandbox Code Playgroud)

我没有得到我想要的。我反而得到:

aaa
bbb
ccc
ddd
eee
fff
--
--
fff
ggg
hhh
iii
Run Code Online (Sandbox Code Playgroud)

grep sed awk text-processing

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

使用 sed 去除字符 < > ,

我有一个包含以下行的文件:

...
... <230948203[234]>, ...
... <234[24]>, ...
..
Run Code Online (Sandbox Code Playgroud)

我想用sed的删除字符< ,>从每一行

我尝试使用sed 's/<>,//g'但它没有用(它没有改变任何东西)。我需要转义这些特殊字符吗?是否可以使用单个sed命令删除多个字符?

sed

33
推荐指数
2
解决办法
14万
查看次数

获取两条路径之间的相对链接

假设我有两条路径:<source_path><target_path>。我希望我的 shell (zsh) 自动找出是否有办法将<target_path>from表示<source_path>为相对路径。

例如让我们假设

  • <source_path>/foo/bar/something
  • <target_path>/foo/hello/world

结果是 ../../hello/world

为什么我需要这个:

我需要<source_path>尽可能<target_path>使用相对符号链接创建一个符号链接,否则当我从 Windows 访问网络上的这些文件时,我们的 samba 服务器无法正确显示文件(我不是系统管理员,并且不无法控制此设置)

假设<target_path><source_path>是绝对路径,下面创建一个指向绝对路径的符号链接。

ln -s <target_path> <source_path>
Run Code Online (Sandbox Code Playgroud)

所以它不适合我的需要。我需要为数百个文件执行此操作,因此我无法手动修复它。

任何 shell 内置程序可以解决这个问题?

shell zsh symlink files

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