我正在寻找一个命令来限制从stdin.
我为此编写了一个小脚本(欢迎批评),但我想知道是否没有针对此简单且(我认为)常见用例的标准命令。
我的脚本找到了两个数字中的最小值:
#!/bin/bash
# $1 limit
[ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; }
read number
if [ "$number" -gt "$1" ]; then
echo "$1"
else
echo "$number"
fi
Run Code Online (Sandbox Code Playgroud) 我正在定义要在不同发行版中使用的通用 bash 文件。我需要一种方法来检查系统是使用 systemd 还是 sysvinit (/etc/init.d/)。我需要这个,所以我运行适当的命令来启动服务。检查这个的安全方法是什么?我目前检查 systemctl 命令是否存在,但这真的是一个选项,因为可能存在 systemctl 命令可用的情况,但这并不一定意味着实际使用了 systemd?
这是我当前 bash 脚本的摘录:
#!/bin/sh
if [ command -v systemctl >/dev/null ]
then
systemctl service start
else
/etc/init.d/service start
fi
Run Code Online (Sandbox Code Playgroud) 是否可以从剪贴板中获取图像并将其输出到文件(使用 X)?
我可以很容易地用文本做到这一点:
$ xclip -selection c -o > file.text
Run Code Online (Sandbox Code Playgroud)
但是当我用图像尝试上述操作时,什么也没有写。
我想这样做的原因是我没有安装图像编辑器,这让我思考是否可以在不安装的情况下做到这一点。
我正在尝试编写一个脚本,该脚本将根据机器的架构确定操作。我已经uname -m习惯收集架构线了,但是我不知道有多少个ARM架构,也不知道一个是armhf, armel, 还是arm64.
由于这是需要这种脚本来确定脚本的部分是否可以运行或不,我试图找到一个简单的方法来确定该架构armhf,armel或arm64。是否有可用于输出或者任何单行或简单的命令armhf,armel或arm64?
该脚本是专门为 Debian 和 Ubuntu 系统编写的,我正在考虑这一点(如果您不在这些发行版之一上,它会自动退出,但是如果命令存在)
编辑:最近了解到 armel 已死,并且 arm64 软件构建器(PPA 或基于虚拟的)并不是最稳定的。所以我有一个通配符搜索查找arm*和假设 armhf,但仍然有必要找出一个返回三个之一的一个 liner - 无论是 Ubuntu/Debian 命令还是内核调用或其他东西。
Node.js现在非常流行,我一直在用它编写一些脚本。不幸的是,兼容性是一个问题。正式地,Node.js 解释器应该被称为node,但 Debian 和 Ubuntu 提供了一个名为的可执行文件nodejs。
我想要 Node.js 可以在尽可能多的情况下使用的可移植脚本。假设文件名是foo.js,我真的希望脚本以两种方式运行:
./foo.js如果node或nodejs在 中,则运行脚本$PATH。node foo.js还运行脚本(假设调用了解释器node)注意: xavierm02 和我自己的答案是多语言脚本的两种变体。如果存在,我仍然对纯粹的shebang解决方案感兴趣。
我有一个由普通用户运行时需要 root 权限的进程。显然我可以使用“setuid 位”来完成此操作。在 POSIX 系统上执行此操作的正确方法是什么?
另外,如何使用使用解释器(bash、perl、python、php 等)的脚本执行此操作?
我尝试删除 Synology NAS 上超过 30 天的备份文件。这些文件位于从我的网络服务器下载备份文件期间创建的目录中。
下载后,我想检查 -mtime 然后删除旧文件。
脚本来了:
#!/bin/sh
## Datum auslesen
datum=`date +%Y-%m-%d_%H-%M`
## Mit wget die Datei AutoBackupDB-1.zip laden und in einem Ordner mit Datum uns Uhrzeit speichern
wget -m -P /volume1/Austauschordner/backup_xyz/$datum/ ftp://backup:backup@domain.tdl/AutoBackupDB-1.zip
echo "Backup von xyz wurde erstellt! "
## finde alle Ordner in einem angegebenen Verzeichnis mit dem Suchnamen die älter als die angegebenen Tage sind und lösche diese
find /volume1/Austauschordner/ -type d -name 'backup_*' -ctime +30 -delete
Run Code Online (Sandbox Code Playgroud)
如果我运行这个脚本,它会告诉我“目录不为空”并且不会删除任何内容。
是否有一种简单的方法或选项可以删除目录中的所有内容?
我想并行运行多个 Bash shell 脚本。但是,我想避免竞争条件。我可以为此目的使用哪些 Unix 命令真正具有原子性,我该如何使用它们?
假设我有一个包含以下内容的文件
bob
john
sue
Run Code Online (Sandbox Code Playgroud)
现在这些直接对应(在本例中)URL 模式,例如http://example.com/persons/bob.tar, john.tar, sue.tar。
我想使用这些线路并运行它们xargs。我不知道传递给正在执行的命令的内容是什么。我如何从提示符(比如我想简单地回显每一行cat file | xargs echo $PARAM)或从 bash 脚本访问参数。