我想从改变文件扩展名*.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) 我在 Mac OSX 上工作,所以我想我在使用 bash...?
有时我会输入一些我不想被历史记住的东西。如何删除它?
我大部分时间都在 Unix 环境中工作并使用终端模拟器。我尝试在命令行上使用颜色,因为颜色使输出更加有用和直观。
有哪些选项可以为我的终端环境添加颜色?你用什么技巧?你遇到过哪些陷阱?
不幸的是,对颜色的支持因终端类型、操作系统、TERM 设置、实用程序、错误实现等而异。
经过大量实验,以下是我的设置中的一些提示:
TERM=xterm-color,大多数主机(但不是全部)都支持。screen,这增加了另一层乐趣。dircolors默认设置类似和,我不想在一百个不同的主机上修改它。所以我尝试坚持使用默认值。相反,我调整了终端的颜色配置。对某些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。
在我的~/.bashrc文件中有两个定义:
commandA,这是更长路径的别名commandB,这是 Bash 脚本的别名我想用这两个命令处理同一个文件,所以我写了以下 Bash 脚本:
#!/bin/bash
for file in "$@"
do
commandA $file
commandB $file
done
Run Code Online (Sandbox Code Playgroud)
即使在退出会话并重新登录后,command not found当我运行此脚本时,Bash 仍会提示我输入两个命令的错误。
我究竟做错了什么?
你可以用eval命令做什么?为什么有用?它是 bash 中的某种内置函数吗?没有man它的页面。。
我想要一个将当前工作目录带到变量的脚本。需要目录的部分是这样的dir = pwd。它只是打印pwd如何将当前工作目录放入变量中?
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) 如果您已经关注 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 的作者肯定没有打算让我们引用所有变量。
如果我们揭露与此类行为相关的风险,也许我们可以说服他们。
如果您忘记引用变量,那么最糟糕的事情是什么。真的有那么糟糕吗?
我们在这里谈论什么样的漏洞?
在什么情况下会出现问题?
使用版本控制系统时,当差异显示为 时,我对噪音感到恼火No newline at end of file。
所以我想知道:如何在文件末尾添加换行符以摆脱这些消息?
bash ×10
shell ×6
shell-script ×2
alias ×1
colors ×1
command-line ×1
directory ×1
eval ×1
newlines ×1
prompt ×1
quoting ×1
rename ×1
scripting ×1
security ×1
shellshock ×1