我正在尝试git clone通过 bash 脚本执行一个低谷,但是我第一次运行脚本并且服务器未知时脚本失败。我有这样的事情:
yes | git clone git@github.com:repo/repoo.git
Run Code Online (Sandbox Code Playgroud)
yes | git clone git@github.com:repo/repoo.git
Run Code Online (Sandbox Code Playgroud)
但它忽略了yes. 您知道如何强制git clone将密钥添加到已知主机吗?
我最近获得了对服务器列表的用户名/密码访问权限,并希望将我的 SSH 公钥传播到这些服务器,以便我可以更轻松地登录。
这样就很清楚了:
ssh-copy-id在 for 循环中一遍又一遍地输入我的密码。标准cat逐行连接文件(逐行,如果你愿意的话)。我发现自己最近越来越需要水平 cat命令;即一个命令,它接受一个文件列表并将它们水平连接起来,逐列。到目前为止,我已经使用了临时解决方法,但我想知道是否存在一个很好的解决方案。
为了澄清,请考虑以下两个文件之间cat和hcat的比较:
$ cat a.dat 1.dat
a b
c d
1 2
3 4
$ hcat -s ' ' a.dat 1.dat
a b 1 2
c d 3 4
Run Code Online (Sandbox Code Playgroud)
(与cat我们需要指定分隔符不同,因为按照惯例,UNIX 文件的末尾没有列分隔符。)
我需要打印出一个数字,但具有给定的宽度和四舍五入(使用 awk!)
%10s
Run Code Online (Sandbox Code Playgroud)
我有这个,但不知何故我需要连接,%d但我所做的一切,最终都会有太多的 awk 参数(因为我有更多的列)。
在 shell 脚本中,如何在不实际尝试修改文件的情况下轻松且非侵入性地测试对文件的写访问权限?
我可以解析 的输出stat,但这看起来非常复杂,而且可能很脆弱,尽管我不确定不同实现和时间的 stat 输出有多少不同。
我可以附加到文件的末尾,看看是否成功,但这有潜在危险,我能想到的两个原因是:
我注意到很多问题、答案和评论都表示不屑(有时甚至害怕)编写脚本而不是单行代码。所以,我想知道:
我何时以及为什么应该编写独立脚本而不是“单行脚本”?或相反亦然?
两者的用例和优缺点是什么?
是否某些语言(例如 awk 或 perl)比其他语言(例如 python)更适合单行?如果是这样,为什么?
这只是个人喜好问题还是在特定情况下编写一个或另一个有很好的(即客观的)理由吗?这些原因是什么?
one-liner:直接键入或粘贴到 shell 命令行中的任何命令序列。常累及管道和/或使用的语言,如sed,awk,perl,和/或工具,如grep或cut或sort。
命令行上的直接执行是定义特征 - 长度和格式无关紧要。“一行”可能全部在一行上,也可能有多行(例如 sh for 循环,或嵌入的 awk 或 sed 代码,带有换行和缩进以提高可读性)。
script: 任何解释性语言中的任何命令序列,它们被保存到一个文件中,然后被执行。脚本可能完全用一种语言编写,也可能是使用其他语言的多个“单行”的外壳脚本包装器。
我有我自己的答案(稍后我会发布),但我希望这成为关于该主题的规范问答,而不仅仅是我的个人意见。
我想通过抑制通常成功的辅助命令的输出来简化脚本的输出。
但是,-q当它们偶尔失败时,在它们上使用会隐藏输出,所以我无法理解错误。此外,这些命令将其输出记录在stderr.
有没有办法在命令成功时才抑制它的输出?
例如(但不限于)这样的事情:
mycommand | fingerscrossed
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,fingerscrossed捕获输出并丢弃它。否则它会将其回显到标准或错误输出(无论如何)。
我想找到一个等价的
cmd 1 && cmd 2 && ... && cmd 20
Run Code Online (Sandbox Code Playgroud)
但是在一个for循环中表达的命令就像
for i in {1..20}
do
cmd $i
done
Run Code Online (Sandbox Code Playgroud)
您建议在第二个表达式中更改什么以找到与第一个相同的表达式?
在Apache httpd 项目的“support/apxs.in”脚本中,@在#!. 也就是说,脚本的第一行是:
#!@perlbin@ -w
Run Code Online (Sandbox Code Playgroud)
这是 Perl 的东西还是 UNIX 内核的东西?换句话说,可以使用path/to/script/script_name.in?
如果没有,那么用#!?启动脚本的原因是什么?
我想递归地找到接受文件作为参数的脚本返回非零值的所有文件。知道如何使用“查找”或类似工具执行此操作吗?
scripting ×10
files ×3
shell-script ×3
shell ×2
ssh ×2
awk ×1
bash ×1
cat ×1
conventions ×1
exit-status ×1
find ×1
for ×1
git ×1
perl ×1
permissions ×1
printf ×1
shebang ×1