我用空格命名了一些文件,我想用_. 但是,每次我在 shell 中使用文件名(例如Spring 2011)编写命令时,shell 都无法识别该文件或目录。
我该怎么办?有什么办法可以将 unicode 字符用于空格吗?
我刚刚解压了一个档案,该档案在我的整洁目录中产生了一堆文件。例如:
user@comp:~/tidy$ tar xvf myarchive.tar
file1
file2
dir1/
dir1/file1
dir1/subdir1/
dir1/subdir1/file1
dir2/
dir2/file1
...
Run Code Online (Sandbox Code Playgroud)
我原以为 tar 文件会被组织在一个文件夹中(即myarchive/),但事实并非如此!现在我有大约 190 个文件和目录,它们在一个有组织的目录中进行了数字化。这些解压缩的文件需要清理。
有什么方法可以“撤消”并删除从此存档中提取的文件和目录?
感谢下面的精彩回答。总之,这里有两个步骤(1)删除文件,(2)以反向打包顺序删除空目录结构(首先删除外部目录):
tar tf myarchive.tar | xargs -d'\n' rm
tar tf myarchive.tar | tac | xargs -d'\n' rmdir
Run Code Online (Sandbox Code Playgroud)
更安全的是,通过echo在xargs.
我正在运行 Jenkins 的 shell 脚本,它使用 shebang options 启动 shell 脚本#!/bin/sh -ex。
根据Bash Shebang 的假人?, -x, “导致 shell 打印执行跟踪”,这对于大多数用途都非常有用——除了回声:
echo "Message"
Run Code Online (Sandbox Code Playgroud)
产生输出
+ echo "Message"
Message
Run Code Online (Sandbox Code Playgroud)
这有点多余,看起来有点奇怪。有没有办法保持-x启用,但只输出
Message
Run Code Online (Sandbox Code Playgroud)
而不是上面的两行,例如通过在 echo 命令前加上一个特殊的命令字符,或者重定向输出?
当我通过 SSH 使用腻子(从我的 Windows 7 盒子)连接到我的本地 Ubuntu 开发服务器时,以下组合键无法在单词边界上向前和向后移动光标:
光标一次只能移动一个字符。我正在使用 bash。
我只想获取文件的父目录的名称。
示例:当我有 时path=/a/b/c/d/file,我只想要d而不想要/a/b/c/d(我从 中获得dirname $path)作为输出。
有没有什么复杂的方法可以做到这一点?
在编写 shell 脚本的过程中,我遇到了以下 if/else 语句的问题,该语句位于脚本中间的某个位置:
if [ $act -eq "add" ]
then
read - "add or update: " $comm
git commit -m "$comm $file"
else
git commit -m "$act $file"
fi
Run Code Online (Sandbox Code Playgroud)
返回的错误是:
./gitup: line 13: [: add: integer expression expected
Run Code Online (Sandbox Code Playgroud)
然后继续执行脚本的其余部分。如何让 if 段评估/比较变量与字符串输入而不是整数;在我尝试的其他一些事情中使用“!=”时需要一个不同的错误。
一瞬间的光彩,我执行了命令source ~/.bash_history。幸运的是,大多数命令都是vim用来编辑一些文件的,但我的历史中有一些可怕的命令——移动和删除具有相对路径的文件。
幸运的是现在它卡在一个vim会话中,但是如果我暂停或退出它,它会进入下一个。历史文件有 1000 行。
除了重新启动机器之外,如何取消此命令?
我已经使用 bash 十多年了,并且已经习惯于能够输入 !$ 来重复最后一个参数,例如:
$ mkdir foo
$ cd !$
cd foo
Run Code Online (Sandbox Code Playgroud)
(最后一行是由 shell 打印出来的,告诉你你的命令的计算结果)。同样,我经常对以下内容:
$ make_sandwich
-bash: make_sandwich: Permission denied
$ sudo !!
sudo make_sandwich
Run Code Online (Sandbox Code Playgroud)
我真的很喜欢鱼壳,但我的肌肉记忆已经很成熟了。鱼有等价物吗?我可以配置 fish 以使用相同的命令吗?
我想在 ~/.bashrc 中添加几个目录到我的 $PATH。
我的 $PATH 很长,所以很难看出它包含哪些目录以及以什么顺序。
我知道我可以修改我的 ~/.bashrc 为:
PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
Run Code Online (Sandbox Code Playgroud)
它会让它更容易阅读。但我想知道在过去的几年里,Bash 是否已经获得了一些使指定长 PATH 更容易的语法。例如,我在幻想类似于以下的语法:
PATH=:((
/some/dir
/another/dir
/yet/another
/and/another
...
))
Run Code Online (Sandbox Code Playgroud)
我知道这样的语法是无效的。我想知道是否有这么简单的事情。在那儿?
我知道什么是内置命令,但它builtin本身有什么作用?执行which ls显示了我/bin/ls,但执行不which builtin返回任何内容。
man builtin只是给了我一个内置命令列表,其中一个是builtin. 手册页的其余部分解释了内置是什么,而不是什么builtin是。
builtin --help告诉我,builtin: usage: builtin [shell-builtin [arg ...]]但仍然不是它的作用。
它是否以其他内置命令不是的方式成为 bash 的一部分?