标签: bash

如何更改多个文件的扩展名?

我想从改变文件扩展名*.txt*.text。我尝试使用该basename命令,但在更改多个文件时遇到问题。

这是我的代码:

files=`ls -1 *.txt`

for x in $files
do
    mv $x "`basename $files .txt`.text"
done
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

files=`ls -1 *.txt`

for x in $files
do
    mv $x "`basename $files .txt`.text"
done
Run Code Online (Sandbox Code Playgroud)

bash shell-script rename

289
推荐指数
14
解决办法
44万
查看次数

如何从历史记录中删除一行?

我在 Mac OSX 上工作,所以我想我在使用 bash...?

有时我会输入一些我不想被历史记住的东西。如何删除它?

command-line shell bash command-history

285
推荐指数
7
解决办法
30万
查看次数

为您的终端和 shell 环境着色?

我大部分时间都在 Unix 环境中工作并使用终端模拟器。我尝试在命令行上使用颜色,因为颜色使输出更加有用和直观。

有哪些选项可以为我的终端环境添加颜色?你用什么技巧?你遇到过哪些陷阱?

不幸的是,对颜色的支持因终端类型、操作系统、TERM 设置、实用程序、错误实现等而异。

经过大量实验,以下是我的设置中的一些提示:

  1. 我倾向于设置TERM=xterm-color,大多数主机(但不是全部)都支持。
  2. 我在许多不同的主机、不同的操作系统版本等上工作。我使用 macOS?X、Ubuntu Linux、RHEL/CentOS/Scientific Linux 和 FreeBSD 中的所有内容。如果可能的话,我试图让事情保持简单和通用。
  3. 我使用 GNU 做了很多工作screen,这增加了另一层乐趣。
  4. 许多操作系统dircolors默认设置类似和,我不想在一百个不同的主机上修改它。所以我尝试坚持使用默认值。相反,我调整了终端的颜色配置。
  5. 对某些Unix 命令ls, grep, less, vim)和Bash 提示符使用颜色。这些命令似乎使用标准的“ ANSI 转义序列”。例如:

    alias less='less --RAW-CONTROL-CHARS'
    export LS_OPTS='--color=auto'
    alias ls='ls ${LS_OPTS}'
    
    Run Code Online (Sandbox Code Playgroud)

我会发布我的.bashrc并回答我自己的问题 Jeopardy Style。

shell colors bash prompt

284
推荐指数
9
解决办法
81万
查看次数

为什么我的 Bash 脚本不能识别别名?

在我的~/.bashrc文件中有两个定义:

  1. commandA,这是更长路径的别名
  2. commandB,这是 Bash 脚本的别名

我想用这两个命令处理同一个文件,所以我写了以下 Bash 脚本:


#!/bin/bash

for file in "$@"
    do
    commandA $file
    commandB $file
done
Run Code Online (Sandbox Code Playgroud)

即使在退出会话并重新登录后,command not found当我运行此脚本时,Bash 仍会提示我输入两个命令的错误。

我究竟做错了什么?

bash alias

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

如何制作“按任意键继续”

我正在制作一个脚本来安装我的主题,安装完成后会出现变更日志,并且会有“按任意键继续”,以便用户阅读变更日志后按任意键继续

bash

266
推荐指数
3
解决办法
27万
查看次数

bash 中的“eval”命令是什么?

你可以用eval命令做什么?为什么有用?它是 bash 中的某种内置函数吗?没有man它的页面。。

shell bash eval

261
推荐指数
7
解决办法
65万
查看次数

如何获取当前工作目录?

我想要一个将当前工作目录带到变量的脚本。需要目录的部分是这样的dir = pwd。它只是打印pwd如何将当前工作目录放入变量中?

shell scripting bash directory

256
推荐指数
4
解决办法
93万
查看次数

什么 env x='() { :;}; 命令' bash 做,为什么不安全?

bash 中明显存在漏洞(CVE-2014-6271):Bash 特制环境变量代码注入攻击

我试图弄清楚发生了什么,但我不完全确定我理解它。如何echo在单引号中执行?

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
Run Code Online (Sandbox Code Playgroud)

编辑 1:打补丁的系统如下所示:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
Run Code Online (Sandbox Code Playgroud)

编辑 2:有一个相关的漏洞/补丁:CVE-2014-7169,它使用了一个稍微不同的测试:

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c …
Run Code Online (Sandbox Code Playgroud)

bash vulnerability shellshock

246
推荐指数
5
解决办法
11万
查看次数

忘记在 bash/POSIX shell 中引用变量的安全隐患

如果您已经关注 unix.stackexchange.com 一段时间了,那么您现在应该知道,echo $var在 Bourne/POSIX shell(zsh 是例外)中的列表上下文(如)中不加引号的变量具有非常特殊的含义,并且除非你有很好的理由,否则不应该这样做。

在这里的许多问答中详细讨论了它(例如:为什么我的 shell 脚本会因空格或其他特殊字符而窒息?何时需要双引号?shell 变量的扩展以及 glob 和 split 对其的影响引用vs 不带引号的字符串扩展)

自从 70 年代末 Bourne shell 首次发布以来就是这种情况,并且没有被 Korn shell 改变(David Korn 最大的遗憾之一(问题 #7))或者bash大部分复制了 Korn shell,这就是POSIX/Unix 是如何指定的。

现在,我们仍然在这里看到许多答案,甚至偶尔会公开发布未引用变量的 shell 代码。你会认为人们现在已经学会了。

根据我的经验,主要有 3 类人会省略引用他们的变量:

  • 初学者。这些可以被原谅,因为它是一种完全不直观的语法。我们在这个网站上的职责是教育他们。

  • 健忘的人。

  • 即使经过反复锤击也不相信的人,他们认为Bourne shell 的作者肯定没有打算让我们引用所有变量

如果我们揭露与此类行为相关的风险,也许我们可以说服他们。

如果您忘记引用变量,那么最糟糕的事情是什么。真的有那么糟糕吗?

我们在这里谈论什么样的漏洞?

在什么情况下会出现问题?

shell security bash shell-script quoting

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

如何在文件末尾添加换行符?

使用版本控制系统时,当差异显示为 时,我对噪音感到恼火No newline at end of file

所以我想知道:如何在文件末尾添加换行符以摆脱这些消息?

shell bash text-processing newlines

237
推荐指数
8
解决办法
36万
查看次数