Questions tagged «scripting»

脚本是由解释程序执行而不是编译为独立可执行程序的命令或指令序列。

4
类似于shell的二进制处理环境
这个问题前几次出现在我面前,现在是对问题的回应,它 来自Bash中stdin的二进制数据块, 在/programming/993434/what-language-is-to-binary中给出按文本进行操作也不令人满意。 我正在寻找一个专门用于处理二进制文件I / O的脚本环境。我知道我可以使用一种成熟的编程语言(c / Python / ...),但是它们有巨大的初始化和编码开销(c中的分配和fread / fwrite,Python中的位串...)更不用说它们不太适合编写脚本(从中调用其他应用程序)。Perl的unpack功能,面向字符串的操作和愚蠢的语法没有更好的选择。 类似od,但作为一种语言。 我的期望: 使用单个开关/命令设置或更改字节序。 请求类型的简单的规范(像延伸的bash read var用int32 var, float var等)。 通过管道处理二进制,跳过指定的字节数。 我们习惯的标准脚本流控制(for / if / ...)。 我想以与检查ASCII文件时一样的便捷性和洞察力来处理原始数据(摄影,科学数据,未知和记录不良的格式)。我现在正在使用c,但是它不是临时脚本的最佳选择,并且不能交互。 有谁知道这样的工具?请没有clicky GUI软件,它需要通过ssh,其他脚本等工作。“不存在”是可以接受但令人沮丧的答案。

3
何时在Shell脚本中使用重定向到stderr
我知道行为良好的实用程序,例如grep,会将“正常”消息输出到stdout,将错误消息输出到stderr。 $ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory 当我自己编写shell脚本时,我经常发现很难决定应该在stderr上显示什么输出和哪些消息,或者是否应该打扰。 我想了解一种良好的做法:什么时候将某些消息重定向到stderr是合理的,什么时候不可行? 当然,“取决于情况”,但是您是否有一些见解可以帮助我做出这些决定? 为了使这个主观问题适合格式,我想鼓励回答“为什么”的答案,并以经验为基础,并在可能的情况下以事实为依据。

9
提取嵌套的zip文件
我有许多zip档案,每个档案都包含许多zip档案。递归提取此zip存档及其子zip存档中包含的所有文件的最佳方法是什么,而不是zip存档本身?
15 files  scripting  zip 


3
是否可以使用终端在各种窗口上模拟“关闭”事件?
我在Ask Ubuntu上回答了gnome-terminal通过命令退出所有实例的情况,但是正如大家所看到的gnome-terminal,似乎没有SIG调用,我可以使用它来模拟此“ Close”事件。因此,这引起了我的疑问,在GNOME / KDE / LXDE / {是否将窗口/桌面管理器/环境放在此处}中,有没有一种方法可以模拟“单击关闭按钮”事件?我读过 不同的 问题 ,可能与此有任何关系,但不作答。 我正在寻找的是全局命令(如果存在)在不同情况下执行此操作。如果不存在,请说明“关闭”按钮的工作方式。 可能的用途: 我打开了一个确定任务的应用程序集,并希望在单个笔触/命令中关闭所有这些应用程序(不再使用时)而又不抑制任何操作您想保存您的工作吗?警报。 关闭所有gnome-terminal实例,但如果仍有子进程仍在运行,请警告我。 现在我什么也没想到...

3
Bash引发错误,第8行:$ 1:未绑定变量
我正在尝试学习如何使用getopts,以便我可以使用具有经过解析的输入的脚本(尽管我认为getopts可能更好)。我正在尝试编写一个简单的脚本以返回分区使用率。问题是我的bash函数之一似乎不喜欢我$1在函数中引用为变量。我引用的原因$1是因为get_percent可以将函数传递给安装点作为显示而不是所有安装点的可选参数。 剧本 #!/usr/bin/bash set -e set -u set -o pipefail get_percent(){ if [ -n "$1" ] then df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }' else df -h | tail -n +2 | awk '{ print $1,"\t",$5 }' fi } usage(){ echo "script usage: $(basename …

2
以双连字符(-)开头的shebang如何工作?
我在RosettaCode页中发现了以下类型的shebang: --() { :; }; exec db2 -txf "$0" 它适用于Db2,适用于Postgres。但是,我不了解整条线。 我知道双破折号是SQL中的注释,此后它使用一些参数将文件本身作为文件传递给Db2可执行文件。但是圆括号,卷曲的小节,冒号和分号又如何替换真正的shebang#呢?? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL

3
Systemd Postgresql启动脚本
我正在将postgresql安装到第二台服务器上 以前我安装了postgresql,然后使用提供的脚本 ./contrib/start-scripts/linux 放入正确的目录 # cp ./contrib/start-scripts/linux /etc/rc.d/init.d/postgresql92 # chmod 755 /etc/rc.d/init.d/postgresql92 然后我可以按预期执行 # service postgresql92 start 但是,新机器正在使用Systemd,看来有一种完全不同的方法来执行此操作 我不想为此而and毁,所以我想知道是否有人可以指出正确的方向,以实现相同的结果

3
我如何做N向差异?
如何区分多个命令的输出?vimdiff最多可以支持四个文件,但diff它本身似乎恰好支持两个文件。 使用的某些变体是否可以直接实现diff,还是我必须将所有命令的输出保存到临时文件中,选择一个并将其与其余内容进行比较? 内容: 我必须检查多个服务器上某个命令的输出,看看它们是否都同意。目前,仅报告是否发现任何差异似乎是件好事,但如果可能的话,我想说:X%的服务器彼此同意,Y%的服务器彼此同意;或服务器Z是奇数。 我有一个四向多主LDAP设置,并且我想验证ContextCSN所有四个值是否彼此一致。 所以现在我做了: #! /bin/bash for i in {1..4}.ldap do ldapsearch -x -LLL -H ldap://$i -s base -b dc=example,dc=com contextCSN > $i.csn; done set -e for i in {2..4} do diff -q 1.csn $i.csn done 并检查脚本的错误代码。有更好的工具吗? 欢迎在Ubuntu 14.04上使用的任何工具。
14 scripting  diff 

7
如何从文件中删除多个空白行?
我有一些用于记笔记的文本文件-纯文本,通常仅使用cat >> file。有时我使用一两行空白(仅返回-换行符)来指定新的主题/思路。在每个会话结束时,在用Ctrl+ 关闭文件之前D,我通常添加很多(5-10)空行(返回键)以分隔会话。 这显然不是很聪明,但是它对我有用。我做不过最终了很多很多不必要的空行,所以我在寻找一种方式来删除(大部分)的额外线。是否有Linux命令(剪切,粘贴,grep,...?)可以直接与几个选项一起使用?或者,是否有人对sed,awk或perl(可以在任何脚本语言中使用,尽管我更喜欢sed或awk)的脚本都能满足我的需求?用C ++编写某些东西(我实际上可以自己做),似乎有点过头了。 情况1:我需要的是一个脚本/命令,该脚本/命令将删除多于两个(3个或更多)连续的空行,并将其替换为仅两个空行。尽管也可以对其进行调整以删除多于一行(两行或更多)和/或仅用一个空白行替换多个空白行,这是很好的。 情况2:我还可以使用脚本/命令来删除两行文本之间的单个空白行,但照原样保留多个空白行(尽管删除其中一个空白行也是可以接受的)。
14 scripting  sed  awk  perl  filter 

6
如何使用一行将多个命令发送到sftp
以下命令sftp使用一行发送一条命令: sftp -o PasswordAuthentication=no user@host" <<<"lcd /home" 如何发送多行以sftp使用一行。是否可以插入回车符或实现此目的的方法,例如: sftp -o PasswordAuthentication=no user@host" <<<"lcd /home\n cd /myhome\n get file" 想法是不要sftp -b在加载外部文件列表命令的位置使用该选项。
14 scripting  sftp 

1
可以在脚本中使用功能而无需设置解释器二进制文件的大小吗?
现在,我正在cap_net_bind_service MY_USERNAME/etc/security/capability.conf中使用。 现在,我只需要设置cap_net_bind_service+i我最喜欢的脚本语言的解释器就可以通过libcap [-ng] 添加CAP_NET_BIND_SERVICE到有效集合中。 这很好用,但是我想知道是否有一种方法可以在不对解释器二进制代码设置任何上限的情况下实现相同的目的。虽然这不是一个大问题(其他用户帐户没有上限,所以即使在解释器二进制文件中设置了位,他们也无法使用该上限),但由于每次使用解释器时我都必须重新设置标志,这有点令人讨厌更新。

4
通过脚本在sftp连接中执行命令
这是一个非常基本的问题,对于bash来说我还是很陌生,无法弄清楚该怎么做。不幸的是,谷歌搜索没有带我到任何地方。 我的目标是使用sftp连接到服务器,上传文件,然后断开连接。 我有以下脚本: UpdateJar.sh #!/bin/bash sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins #Change directory on server #cd /home/kalenpw/TestWorld/plugins #Upload file put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar exit 问题是,此脚本将建立sftp连接,然后什么也不做。一旦我在连接中手动键入exit,它就会尝试执行put命令,但是由于sftp会话已关闭,它只会显示put:命令未找到。 我如何才能使其正常工作? 谢谢

5
如何在mawk中打​​印自己的脚本名称?
在bash中$0包含脚本的名称,但是在awk中,如果我使用以下内容创建名为myscript.awk的脚本: #!/usr/bin/awk -f BEGIN{ print ARGV[0] } 并运行它,它只会打印“ awk”。此外,i> 0的ARGV [i]仅用于命令行中的脚本参数。那么,如何使其打印脚本名称,在本例中为“ myscript.awk”?
13 awk  scripting  mawk 

4
管理SSH密钥的建议
您发现管理大量SSH密钥对的最佳实践是什么? 我使用SSH连接到在家和工作中的多个系统。我目前有一个相当小的,可管理的工作和家庭系统密钥对集合。我有一个生成命名密钥对的脚本,因此可以避免混淆。 我的家庭网络由我的笔记本电脑(ubuntu),两个台式机(ubuntu / fedora双启动,fedora / windows双启动)和一个媒体系统(ubuntu)组成。在工作中,我有个人笔记本电脑(用于在家工作),台式机(fedora),生产系统(RHEL)以及带窗口(叹气)和VM(fedora)的笔记本电脑。到目前为止一切都很好。 (我对将家庭密钥对放置在工作系统上或将工作密钥对放置在家庭系统上都没有兴趣。而且我们拥有虚拟用户帐户,可以与其他系统机械化文件传输,而其他系统则必须将私钥驻留在生产机器上,在其他系统之间传输文件。) 但是现在出现了Hadoop,它是一个由100多个系统组成的大型集群,具有更高的复杂性,更多的用户和更多的密钥对。现在,我需要管理密钥。 (我需要澄清。我是一名软件开发人员,向正在部署Hadoop集群的客户端进行咨询。他们需要管理密钥。会有很多人访问该集群,需要将其公共密钥放置在系统上。作为居民Linux专家,他们向我寻求帮助。我建议聘请系统管理员,但直到他们这样做之前,我都会提供帮助) 当我需要将公钥发布到远程系统时,所有“操作方法”网页都建议覆盖(>)(销毁现有密钥)或追加(>>)(这很好,保留现有密钥) 。但是我认为将每个公用密钥分别保存在目标计算机上,并将它们组合在一起会更好。我正在寻找建议。 您发现管理大量密钥的最佳实践是什么? 谢谢! 编辑:一方面需要将密钥放置在许多系统上,同时还要为特定用户提供CRUD(创建,读取,更新,删除/禁用),这意味着需要能够识别哪些密钥属于哪些用户。
13 ssh  scripting 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.