Questions tagged «scripting»

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

2
awk'!a [$ 0] ++'如何工作?
这种单行代码无需预先排序即可从文本输入中删除重复的行。 例如: $ cat >f q w e w r $ awk '!a[$0]++' <f q w e r $ 我在互联网上找到的原始代码为: awk '!_[$0]++' 这让我更加困惑,因为我_在awk中有特殊的含义,就像在Perl中一样,但事实证明,这只是数组的名称。 现在,我了解了单线背后的逻辑: 每条输入行都用作哈希数组中的键,因此,完成后,哈希按到达顺序包含唯一的行。 我想学习的是awk如何准确地解释此表示法。例如,爆炸符号(!)的含义以及此代码段的其他元素。 它是如何工作的?

15
* nix的面向对象的外壳
前言:我喜欢bash,无意发动任何形式的争论或圣战,希望这不是一个非常幼稚的问题。 这个问题与有关超级用户的帖子有些相关,但是我不认为OP真正了解他的要求。我在FreeBSD,Linux,OS X和Windows上的cygwin上使用bash。我最近在Windows上使用PowerShell也有丰富的经验。 * nix的外壳是否已经存在或正在开发中,并且与bash兼容,但是在混合中添加了一层面向对象的脚本编制?我所知道的唯一接近的是python控制台,但据我所知它并不提供对标准Shell环境的访问。例如,我不能只是cd ~和ls,而是chmod +x file在python控制台中。我将不得不使用python来执行那些任务,而不是标准的unix二进制文件,或者使用python代码调用二进制文件。 是否存在这样的外壳?

9
是否有unix命令给出两个数字的最小值/最大值?
我正在寻找一个命令来限制从中读取的数字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

4
$ @除了第一个参数
我需要编写一个以这种方式运行的shell脚本: ./myscript arg1 arg2_1 arg2_2 arg2_3 ....... arg2_# 脚本中有一个for循环 for i in $@ 但是,据我所知,$ @包含$ 1到$($#-1)。但是对于我的程序,$ 1与$ 2 $ 3 $ 4等有明显的不同。我想从$ 2循环到结尾...我如何实现这一点?谢谢:)
36 bash  shell  scripting 

2
条件结构中的分号
为什么将分号放在一个而不是另一个中? 结果是一样的 代码一 if [ "a" == "a" ] then echo "true" fi 代码二 if [ "a" == "a" ]; then echo "true"; fi 第二个代码中的分号是不必要的吗? 什么时候需要放置分号?
35 bash  scripting 


12
在cron中使用notify-send
我正在将Arch Linux与KDE / Awesome WM一起使用。我正在努力 notify-send与cron。 我试过设置DISPLAY/ XAUTHORITY变量,并notify-send使用“ sudo -u” 运行,但都没有结果。 我可以从会话中以交互方式调用通知发送并获得通知。 FWIW,cron作业运行良好,我通过将内容回显到临时文件来进行验证。只是“通知发送”无效。 码: [matrix@morpheus ~]$ crontab -l * * * * * /home/matrix/scripts/notify.sh [matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh #!/bin/bash export DISPLAY=127.0.0.1:0.0 export XAUTHORITY=/home/matrix/.Xauthority echo "testing cron" >/tmp/crontest sudo -u matrix /usr/bin/notify-send "hello" echo "now tested notify-send" >>/tmp/crontest [matrix@morpheus ~]$ cat …

7
Shebang中的多个论点
我想知道是否存在通过shebang行(#!)将多个选项传递给可执行文件的一般方法。 我使用NixOS,在我编写的任何脚本中,shebang的第一部分通常是/usr/bin/env。然后我遇到的问题是,系统将所有后续内容解释为单个文件或目录。 例如,假设我想编写一个bash在posix模式下执行的脚本。编写shebang的幼稚方式是: #!/usr/bin/env bash --posix 但是尝试执行生成的脚本会产生以下错误: /usr/bin/env: ‘bash --posix’: No such file or directory 我知道这篇文章,但我想知道是否有更通用,更清洁的解决方案。 编辑:我知道对于Guile脚本,有一种方法可以实现我想要的内容,在手册的4.3.4节中进行了介绍: #!/usr/bin/env sh exec guile -l fact -e '(@ (fac) main)' -s "$0" "$@" !# 这里的窍门是,第二行(以开头exec)被Guile解释器解释为代码,sh但在#!... !#块中但作为注释,因此被忽略。 不可能将这种方法推广到任何解释器吗? 第二次编辑:经过一番摸索之后,对于可以从中读取输入内容的解释器来说stdin,以下方法可行: #!/usr/bin/env sh sed '1,2d' "$0" | bash --verbose --posix /dev/stdin; exit; 但是,这可能不是最佳的,因为该sh过程一直持续到口译员完成工作为止。任何反馈或建议,将不胜感激。

1
apt-get安装,没有debconf提示符
我想以非交互方式通过apt安装Chef,但默认情况下,apt安装会显示以下提示: 有没有办法在安装过程中跳过此步骤或将值传递给apt install?我仅使用chef-solo,因此实际上不需要服务器组件,因此只需在此提示上按回车即可。
31 scripting  apt  debconf 

7
编写bash脚本时与&&等效吗?
如果这是一个重复的问题,我提前致歉。在问这里之前,我确实做了搜索/检查的工作。 我很喜欢这样写单行代码: foocommand && foocommand2 && foocommand3 我的想法是,我只希望在前一个命令“成功”的情况下运行后续命令。 我正在编写一个冗长的脚本,这种单行代码是不可行的,因为它看起来给其他所有人带来了很多混乱的代码。 我想间隔命令并在脚本中在命令之间写注释。我该怎么做却仍然有&&等价的东西?
31 bash  centos  scripting 

4
Bash Shell脚本输出对齐
我的剧本: date echo -e "${YELLOW}Network check${NC}\n\n" while read hostname do ping -c 1 "$hostname" > /dev/null 2>&1 && echo -e "Network $hostname : ${GREEN}Online${NC}" || echo -e "${GRAY}Network $hostname${NC} : ${RED}Offline${NC}" done < list.txt sleep 30 clear done 正在输出这样的信息: Network 10.x.xx.xxx : Online Network 10.x.xx.xxx : Offline Network 10.x.xx.xxx : …

4
如何在RAM中制作一个临时文件?
我有一个脚本,会将其输出传递给|tee scriptnameYYMMDD.txt。在生成输出的for循环的每个循环之后,我将使用反转文件内容,tac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txt以便在浏览器窗口中以最新行显示日志输出。 我将有几个脚本并行执行此操作。我正在尝试最小化磁盘活动,因此输出|tee scriptnameYYYYMMDD.txt到RAMdisk最好。mktemp在/tmp文件夹中创建一个文件,但该文件似乎不在磁盘上。

6
如何成功运行ssh命令?
有时我会重启设备,并且需要ssh在准备就绪时重新启动。 我想每5秒运行ssh命令,直到命令成功。 我的第一次尝试: watch -n5 ssh me@device.local && exit 1 我怎样才能做到这一点?
28 ssh  scripting  watch 

2
将图像从剪贴板复制到文件
是否可以从剪贴板拍摄图像并将其输出到文件(使用X)? 我可以用文本轻松地做到这一点: $ xclip -selection c -o > file.text 但是,当我尝试上述图像时,什么也没写。 我要执行此操作的原因是我没有安装图像编辑器,这让我开始思考是否可以不安装图像编辑器来执行此操作。

3
如何使用脚本实用程序自动记录所有终端会话
我想要实现的是能够在每次使用Yakuake / Konsole时自动记录我的终端会话以归档。 如果在会议开始时我很容易做到: script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log 但是我想在每次启动Yakuake或打开新标签时自动运行以上命令。 使用.bashrc无效,因为它会产生无限循环,因为'script'打开了一个新会话,该会话依次读取.bashrc并启动了另一个'script',依此类推。 因此,大概我需要以某种方式编写脚本Yakuake / Konsole,以在打开新标签页后立即运行“脚本”。问题是如何?

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.