标签: scripting

使用 echo 打印彩色文本

我知道使用回声打印彩色文本,例如红色,代码是:echo -e "\e[1;31m This is red text \e[0m"
我知道在这个例子中,31 是红色的代码,其他颜色的数量是:

Black       0;30     Dark Gray     1;30
Blue        0;34     Light Blue    1;34
Green       0;32     Light Green   1;32
Cyan        0;36     Light Cyan    1;36
Red         0;31     Light Red     1;31
Purple      0;35     Light Purple  1;35
Brown       0;33     Yellow        1;33
Light Gray  0;37     White         1;37
Run Code Online (Sandbox Code Playgroud)

对于背景颜色,数字是 40 到 47

我的问题是:\eand[m(after 31) 在这里到底是什么意思?
我在手册页中读到 \e 是转义,但我不明白这是什么意思。

scripting shell-script echo

25
推荐指数
3
解决办法
8万
查看次数

shebang 和路径

为什么shebang需要路径?

错误的

#!ruby
Run Code Online (Sandbox Code Playgroud)

正确的

#!/usr/local/bin/ruby

#!/usr/bin/env ruby
Run Code Online (Sandbox Code Playgroud)

操作系统应该有关于注册命令的路径的信息,为什么它仍然期望它被给出?

scripting path

24
推荐指数
2
解决办法
4326
查看次数

bash -e 在 let 或 expr 计算为 0 时退出

我有一个设置 -e 的 bash 脚本,因此脚本将在任何退出状态下退出!= 0。

我正在尝试执行一些分配给变量的基本 shell 算术,有时表达式等于 0,这会导致 let 或 expr 命令的退出状态为“1”。

下面是一个例子:

#!/bin/bash -ex
echo "Test 1"
Z=`expr 1 - 1` || true
echo "Z will print"
let "A=4 - 4"
echo "A WILL NEVER PRINT $A"
Y=`expr 1 - 1`
echo "Y WILL NEVER PRINT $Y"
X=$(expr 2 - 2)
echo "X WILL NEVER PRINT $X"
Run Code Online (Sandbox Code Playgroud)

输出是:

$ ./test_error.sh 
+ echo 'Test 1'
Test 1
++ expr 1 - 1
+ Z=0
+ true
+ echo …
Run Code Online (Sandbox Code Playgroud)

scripting bash exit arithmetic

24
推荐指数
1
解决办法
8027
查看次数

如何在运行时仅从 bash 脚本打印某些命令?

我有一个 bash 脚本,其中包含基于我在调用它时传入的命令行参数的各种 if 语句。关于正在运行的命令的某种输出有助于确认所有这些 if 语句的流程,但我当前的解决方案给了我太多信息。

set -v在脚本中使用对于查看在脚本中运行时打印到屏幕上的命令有些帮助,但是我得到了太多命令。它几乎就像脚本的完整副本。

我想要显示正在运行的命令的输出,但我不想在 if 语句中看到注释、新行、表达式等。

有没有办法在打印之前首先通过正则表达式传递 -v 选项生成的所有可能的输出?或者其他一些解决方案让 bash 只输出某种“类型”的命令(例如,使用可执行文件而不仅仅是 bash 特定的语句、注释等?)

[1] /sf/ask/18033151/对此非常有帮助,也是我得到使用建议的地方set -v

编辑

与我正在运行的脚本类似(但不完全相同)的脚本:

#!/bin/bash

#get verbose command output
set -v

env=$1

if [ "$env" == "dev" ]; then
    python ascript.py
fi

if [ "$env" == "prod" ]; then

    #launching in prod will most likely fail if not run as root. Warn user if not running as root.
    if [ $EUID …
Run Code Online (Sandbox Code Playgroud)

scripting bash shell-script

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

将多个文件的内容提供给脚本的标准输入的简写

假设我有一个名为 的脚本script,它读取stdin一些结果并将其输出到屏幕上。

如果我想为它提供一个文件的内容,我会输入:

$ ./script < file1.txt
Run Code Online (Sandbox Code Playgroud)

但是,如果我想以相同的方式将多个文件的内容提供给脚本,这完全可能吗?到目前为止我想出的最好的是:

cat file1.txt file2.txt > combined.txt && ./script < combined.txt
Run Code Online (Sandbox Code Playgroud)

它使用两个命令并创建一个临时文件。有没有办法做同样的事情但绕过创建组合文件?

shell scripting bash io-redirection

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

Linux 最通用的脚本语言是?

我们正在为 Linux 系统编写脚本,关于什么是最普遍使用的 Linux 脚本语言存在一些争论。Bash,SH,Posix?什么?

linux shell scripting portability

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

如何从命令行获取音量级别?

我在平铺窗口管理器上有一个文本状态栏,我正在使用 tcl 向它提供信息。目前我需要一个命令行来输出 0% 到 100% 的音量级别。我正在使用 Arch Linux。

command-line scripting arch-linux volume

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

使用 mutt 发送用 Markdown 编写的电子邮件

有时我需要在 google-group 内联发送一段代码。文字在这里没有帮助;我可以在 Markdown 中输入它,将其转换为 html(使用 pandoc 等),附加到 mutt astext/html并发送它。

这里有一个很好的解决方案但它使用外部sendmail程序发送电子邮件。我正在使用 mutt,它可以单独通过 IMAP发送电子邮件。

scripting mutt

23
推荐指数
2
解决办法
9293
查看次数

在用户登录时执行命令

在Linux桌面系统中,我想在用户登录时执行一个命令。

在阅读了其他一些帖子后,我尝试将命令插入~/.bashrc但未成功。此外,系统使用图形界面进行用户登录,因此该命令不应与shell 的启动相关。

我还尝试将命令附加到其中包含的脚本之一,但/etc/profile.d没有结果。

有没有另一种方法可以做到这一点?登录后系统读取的任何文件?

shell scripting login

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

如何每 64 小时运行一次脚本?

我需要每 64 小时运行一次脚本。我找不到答案cron。是否可以使用它,或者我应该在 shell 脚本中使用循环?

scripting cron

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