小编Ame*_*ina的帖子

ssh 配置中的多个类似条目

假设我想ssh在我的.ssh config文件中使用相同的设置为 30 个服务器配置我的选项:

host XXX
     HostName XXX.YYY.com
     User my_username
     Compression yes
     Ciphers arcfour,blowfish-cbc
     Protocol 2
     ControlMaster auto
     ControlPath ~/.ssh/%r@%h:%p
     IdentityFile ~/.ssh/YYY/id_rsa
Run Code Online (Sandbox Code Playgroud)

这 30 台机器之间唯一变化的地方是XXX.

除了在我的config文件中重复上述结构 30 次之外,还有另一种方法来定义一系列机器吗?

ssh

255
推荐指数
5
解决办法
14万
查看次数

将命名参数传递给 shell 脚本

有没有什么简单的方法可以将命名参数传递(接收)给 shell 脚本?

例如,

my_script -p_out '/some/path' -arg_1 '5'
Run Code Online (Sandbox Code Playgroud)

并在内部my_script.sh将它们接收为:

# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']

printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
Run Code Online (Sandbox Code Playgroud)

这在 Bash 或 Zsh 中可能吗?

bash zsh shell-script arguments

192
推荐指数
8
解决办法
28万
查看次数

如何检查 shell 是否是登录/交互式/批处理

我想我了解交互式、登录和批处理 shell 之间的区别。请参阅以下链接以获取更多帮助:

我的问题是,如果我在交互式、登录或批处理 shell 上,如何使用命令/条件进行测试?

我正在寻找一个命令或条件(返回truefalse),我也可以放在 if 语句中。例如:

if [[ condition ]]
   echo "This is a login shell"
fi
Run Code Online (Sandbox Code Playgroud)

shell

182
推荐指数
9
解决办法
11万
查看次数

cat line X 到 line Y 在一个大文件上

说我有一个巨大的文本文件(> 2GB),我只是想catXY(如57890000至57890010)。

据我所知,我可以通过管道head输入tail或反之亦然来做到这一点,即

head -A /path/to/file | tail -B
Run Code Online (Sandbox Code Playgroud)

或者

tail -C /path/to/file | head -D
Run Code Online (Sandbox Code Playgroud)

其中ABCD可以根据文件中的行数计算得出,XY

但是这种方法有两个问题:

  1. 你必须计算ABCD
  2. 这些命令可以pipe相互发送比我感兴趣的多得多的行(例如,如果我只读取大文件中间的几行)

有没有办法让 shell 只使用并输出我想要的行?(同时仅提供XY)?

large-files tail cat head

171
推荐指数
5
解决办法
32万
查看次数

如果进程继承了父级的环境,为什么还需要导出?

在这里读到,export在 shell中的目的是使变量可用于从 shell 启动的子进程。

但是,我也看到了这里,并在这里的“进程从它们的父(这开始它们的进程)继承他们的环境。”

如果是这种情况,我们为什么需要export?我错过了什么?

默认情况下,shell 变量不是环境的一部分吗?有什么不同?

shell process environment-variables

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

如何在zsh中定义和加载自己的shell函数

我很难在 zsh 中定义和运行我自己的 shell 函数。我按照官方文档上的说明进行操作,并首先尝试使用简单的示例,但未能使其正常工作。

我有一个文件夹:

~/.my_zsh_functions
Run Code Online (Sandbox Code Playgroud)

在这个文件夹中,我有一个functions_1具有rwx用户权限的文件。在这个文件中,我定义了以下 shell 函数:

my_function () {
echo "Hello world";
}
Run Code Online (Sandbox Code Playgroud)

我定义FPATH为包含文件夹的路径~/.my_zsh_functions

export FPATH=~/.my_zsh_functions:$FPATH
Run Code Online (Sandbox Code Playgroud)

我可以.my_zsh_functionsecho $FPATH或确认文件夹在函数路径中echo $fpath

但是,如果我再从 shell 中尝试以下操作:

> autoload my_function
> my_function
Run Code Online (Sandbox Code Playgroud)

我得到:

zsh:my_test_function:未找到函数定义文件

我还需要做些什么才能打电话my_function吗?

更新:

到目前为止的答案建议使用 zsh 函数获取文件。这是有道理的,但我有点困惑。zsh 不应该知道这些文件在哪里FPATH吗?那这样做的目的是autoload什么?

zsh shell-script

86
推荐指数
3
解决办法
8万
查看次数

zsh 和 bash 中的 for 循环

我注意到在zsh 中有两种构建循环的替代方法:

  1. for x (1 2 3); do echo $x; done
  2. for x in 1 2 3; do echo $x; done

他们都打印:

1
2
3
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么是这两种语法?是否在每个对象$x迭代不同类型的对象

bash是否有类似的区别?

附录:

为什么以下工作?:

#!/bin/zsh
a=1
b=2
c=5    

d=(a b c)    
for x in $d; do print $x;done
Run Code Online (Sandbox Code Playgroud)

但这个没有?:

#!/bin/zsh
a=1
b=2
c=5

d=(a b c)    
# It complains with "parse error near `$d'"
for x $d; do print $x;done 
Run Code Online (Sandbox Code Playgroud)

bash zsh

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

了解 IFS

本站点和 StackOverflow 上的以下几个线程有助于理解IFS工作原理:

但我还有一些简短的问题。我决定在同一篇文章中问他们,因为我认为这可能有助于更好的未来读者:

一季度。 IFS通常在“字段拆分”的上下文中讨论。是场分裂一样的分词

Q2: POSIX 规范

如果IFS 的值为空,则不进行字段拆分。

设置IFS=是否与设置IFS为空相同?这也是将其设置为 an 的意思empty string吗?

Q3:在 POSIX 规范中,我阅读了以下内容:

如果没有设置 IFS,shell 的行为就像 IFS 的值是 <space>, <tab> and <newline>

假设我想恢复IFS. 我怎么做?(更具体地说,我如何引用<tab><newline>?)

Q4:最后,这段代码如何:

while IFS= read -r line
do    
    echo $line
done < /path_to_text_file
Run Code Online (Sandbox Code Playgroud)

如果我们将第一行更改为

while read -r line # Use …
Run Code Online (Sandbox Code Playgroud)

shell

83
推荐指数
3
解决办法
11万
查看次数

使用 rsync 在目录之间移动(而不是复制)文件?

一段时间以来,我一直在使用rsync来复制文件。我的理解是,当要传输的某些文件已经在目标目录中时,rsynccp快,仅传输增量差异(即“增量”)。

如果这是正确的,使用rsync移动文件夹A的内容是否有任何优势,比如文件夹B,而B为空?

文件夹A有接近 1TB 的数据(其中有数百万个文件)。传输将通过本地网络完成AB位于不同的文件系统上,都安装在超级计算机上,例如ANFSB光泽)。

除此之外,我应该使用哪些标志来要求rsync将文件从A移动(而不是复制)到B(即在传输成功完成后删除A)?

cp rsync

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

Zsh 中的命令历史记录

Zsh 如何跟踪命令历史?

我在主目录中看到两个文件:.zhistory.zsh_history. 它们之间有什么区别?这些文件似乎包含我的所有历史记录。Zsh 是否会永远向其中之一添加行?这不会使历史搜索太慢吗?

我可以安全地将这些文件符号链接到另一个位置吗?(例如,用于跟踪历史更改的 git 存储库)

command-history zsh

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