标签: shell-scripting

我如何在 bash 或 ksh 中睡眠一毫秒

sleep 是一个非常流行的命令,我们可以从 1 秒开始睡眠:

# wait one second please 
sleep 1
Run Code Online (Sandbox Code Playgroud)

但是如果我只需要等待 0.1 秒或在 0.1 到 1 秒之间,还有什么选择?

  • 备注:在 linux 或 OS X 上sleep 0.XXX工作正常,但在 solarissleep 0.1sleep 0.01- 非法语法上

linux solaris bash ksh shell-scripting

163
推荐指数
6
解决办法
36万
查看次数

如何在 Debian/Ubuntu 上以非交互方式设置语言环境?

通常,我运行aptitude -y install locales然后dpkg-reconfigure locales设置语言环境。

现在我想把它放到一个 shell 脚本中,我怎样才能可靠地自动/非交互地执行以下操作?

  • 选择en_US.UTF-8并将其设置为系统默认值
  • 禁用所有其他语言环境
  • (可选)验证是否/etc/default/locale包含LANG=en_US.UTF-8预期的唯一条目

ubuntu debian localization shell-scripting

40
推荐指数
5
解决办法
4万
查看次数

从 shell 脚本运行 ssh-agent

我正在尝试创建一个 shell 脚本,其中包括启动 ssh-agent 并向代理添加私钥。例子:

#!/bin/bash
# ...
ssh-agent $SHELL
ssh-add /path/to/key
# ...
Run Code Online (Sandbox Code Playgroud)

问题在于 ssh-agent 显然启动了 $SHELL 的另一个实例(在我的情况下是 bash),从脚本的角度来看,它执行了所有内容,而 ssh-add 及其下面的任何内容都不会运行。

如何从我的 shell 脚本运行 ssh-agent 并让它在命令列表中继续移动?

ssh shell bash ssh-agent shell-scripting

23
推荐指数
5
解决办法
4万
查看次数

bash 脚本中的 Ctrl-C

如何在 bash 脚本中实现ctrl+c处理,从而中断脚本,以及脚本启动的当前正在运行的命令?

(想象一下,有一个脚本可以执行一些长时间运行的命令。用户点击ctrl+c并中断命令,但脚本继续运行。)我需要它的行为方式使他们都被杀死。

bash shell-scripting

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

是否可以在 openssl 的 s_client 命令上设置超时?

我有一个脚本,它使用 openssl 的 s_client 命令为大量主机提取证书。由于防火墙,其中一些主机将不可避免地无法访问。是否可以将 s_client 超时设置为比默认值短得多的值?我在手册页/帮助文件中没有看到。

那个或某种包装器命令将在 X 秒后自动终止 openssl -s_client。

如果可能,我不想预先测试主机/端口的可用性。

unix openssl shell-scripting

21
推荐指数
1
解决办法
3万
查看次数

如何仅授予特定脚本文件的 sudo 权限?

我希望用户对特定目录下的几个 shell 脚本(在我的情况下为 )拥有 sudo 权限(无需密码检查/usr/local/tomcat7/bin),而没有其他任何地方。实现这一目标的最简单方法是什么?

像这样的东西/etc/sudoers似乎不起作用:

jsmith ALL=(ALL) NOPASSWD: /usr/local/tomcat7/bin
Run Code Online (Sandbox Code Playgroud)

linux ubuntu sudo shell-scripting

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

Shell 命令在使用管道时速度较慢,使用中间文件时速度较快

有没有人理解处理时间、使用中间文件或使用管道时的巨大差异?我在新的 debian 挤压服务器上使用标准工具将 tiff 转换为 pdf。执行此操作的标准方法是先转换为 ps。

无管:

root@web5:~# time tiff2ps test.tif > test.ps

real    0m0.860s
user    0m0.744s
sys 0m0.112s

root@web5:~# time ps2pdf13 -sPAPERSIZE=a4 test.ps > test.pdf

real    0m0.667s
user    0m0.612s
sys 0m0.060s
Run Code Online (Sandbox Code Playgroud)

配管:

root@web5:~# time tiff2ps test.tif | ps2pdf13 -sPAPERSIZE=a4 - > test.pdf

real    1m6.098s
user    0m15.861s
sys 0m50.9
Run Code Online (Sandbox Code Playgroud)

在最后一条命令期间,gs 进程始终处于 100%。

更新
这是 ps 生成的 strace 输出:

root@web5:~# strace tiff2ps test.tif > test.ps
execve("/usr/bin/tiff2ps", ["tiff2ps", "test.tif"], [/* 28 vars */]) = 0
brk(0)                                  = 0x1395000
access("/etc/ld.so.nohwcap", F_OK) …
Run Code Online (Sandbox Code Playgroud)

scripting linux bash pipe shell-scripting

20
推荐指数
1
解决办法
4284
查看次数

从 rsync 获取传输文件的列表?

我目前正在使用rsync一个脚本,该脚本将 PHP 应用程序从登台部署到生产服务器。方法如下:

rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
Run Code Online (Sandbox Code Playgroud)

这当前正在输出正在比较的每个文件的列表(项目中的每个文件),但我希望它只输出修改过的文件,所以我可以运行它并--dry-run选择检查每个部署是否只更新所需的文件。

注意:到目前为止我能做的最好的是grep fcst结果,但我正在寻找一个rsync选项,我确定它在那里,但我在手册页中找不到它。

提前致谢!

deployment shell rsync file-transfer shell-scripting

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

如何使用 find 命令删除匹配模式的文件?

我正在尝试编写一个 bash 命令,该命令将删除与特定模式匹配的所有文件 - 在这种情况下,它是所有已建立的旧 vmware 日志文件。

我试过这个命令:

find . -name vmware-*.log | xargs rm
Run Code Online (Sandbox Code Playgroud)

但是,当我运行该命令时,它会阻塞所有名称中包含空格的文件夹。有没有办法格式化文件路径,以便 xargs 将其传递给 rm 引用或正确转义?

linux bash log-files find shell-scripting

16
推荐指数
4
解决办法
1万
查看次数

mysqldump 是否返回状态?

我正在创建一个使用 mysqldump 实用程序备份 mysql 数据库的脚本。我正在外壳程序“sh”中编写此脚本。我想在脚本中捕获 mysqldump 的输出状态(即如果 mysqldump 命令失败或成功),以便我可以报告脚本是否成功。

  • mysqldump 是否返回输出状态?

  • 有人可以告诉我如何做到这一点吗?

mysql shell-scripting

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