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

我在这里读到大写S可以表示该setgid位对于二进制可执行文件处于活动状态。但这是一个文件夹。这是否仍然意味着该setgid位已为其激活?如果是这样,那意味着什么?
我认为以下内容会将 的输出分组为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吗?为什么上面不起作用?
在维基百科上,.sh的文章说:
有关 .sh 文件扩展名类型,请参阅Bourne shell。
其他unix shell怎么样?
我知道在文件中 使用shebang来指示要执行的解释器,但我想知道:
我在本地安装了 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 会话(这是在远程机器上),但没有成功。
会发生什么?
有没有办法告诉ack只搜索当前文件夹上的文本?(或指定一个max-depth级别?)和grep?
假设我执行以下操作:
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直接完成一样。
我在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 衍生物中使用得如此之多?它的目的是什么?
注意: 我对这个习语在bash和zsh 中的作用很感兴趣。
谢谢
考虑一个包含以下条目的文本文件:
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 = 2和A = 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) 我有一个包含以下行的文件:
...
... <230948203[234]>, ...
... <234[24]>, ...
..
Run Code Online (Sandbox Code Playgroud)
我想用sed的删除字符< ,并>从每一行
我尝试使用sed 's/<>,//g'但它没有用(它没有改变任何东西)。我需要转义这些特殊字符吗?是否可以使用单个sed命令删除多个字符?
假设我有两条路径:<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 内置程序可以解决这个问题?