标签: bash

当我 ls、cd 或发出杂项命令时,为什么我的 bash 提示符将最后一行重复两次?

我的提示是这样的:

PS1="\[\033[32m\]\u@myserver\n\[\033[33m\w$\033[0m\] "
Run Code Online (Sandbox Code Playgroud)

因此,作为我ls后的输出,我看到了以下内容:

jake@myserver
~/public_html$
~/public_html$
Run Code Online (Sandbox Code Playgroud)

当我只应该(我认为)看到:

jake@myserver
~/public_html$
Run Code Online (Sandbox Code Playgroud)

颜色命令工作得很好(很漂亮),但是这个重复的线条让我发疯。我根据 Windows 版 MySysGit 附带的命令提示符改编了此命令提示符。

为什么会发生这种情况?

如果我只是在提示符下按回车键,它就会正确打印,而不会出现重复的第二行。复制仅发生在lscd或其他一些 bash 命令之后。

bash prompt ps1

4
推荐指数
1
解决办法
1918
查看次数

在 OS X 终端中找不到 diskutil 命令

我使用的是 Mac OS X 10.6.4,并且在执行以下命令时遇到困难:

diskutil
Run Code Online (Sandbox Code Playgroud)

每当我输入 diskutil 时,终端都会显示:

-bash: diskutil: command not found
Run Code Online (Sandbox Code Playgroud)

有谁知道可能是什么问题?我可以安装 diskutil 脚本吗(可能通过将一些 *.sh 复制到某个目标并向 bash.profile 添加一些内容)?

terminal disk-utility bash macos

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

如何退出 Emacs 中的 bash 终端

我可能让自己陷入了困境。我在 emacs 中有 3 个窗口,其中 2 个是缓冲区,其中一个是我使用以下命令创建的 bash shell:M-x term

现在我无法切换出该窗口 ( C-x o),因为所有命令都被定向到终端。如何切换该缓冲区窗口?

多谢。

bash emacs

4
推荐指数
1
解决办法
1523
查看次数

输入“info bash”后,如何退出文档?

我尝试使用终端。我输入“help”,很高兴看到屏幕上出现命令列表,其中“使用‘info bash’来了解有关 shell 的更多信息”。所以我输入“info bash”,出现了这些词:

File: ada-mode, Node: GNU Free Documentation License, Next: Index, Prev: Comment Handling, Up: Top
Run Code Online (Sandbox Code Playgroud)

接下来是各种文本段落。

看起来当我按空格键时,我可以跳到下一页文本。我找不到如何退出这个“应用程序”。我应该怎么做 ?

这个应用程序的名称是什么?

terminal operating-systems bash documentation navigation

4
推荐指数
1
解决办法
9483
查看次数

其他地方的硬链接目录结构

我有一个文件出现的目录。我想定期运行一个脚本,查找该目录中只有一个链接的所有文件,并将它们硬链接到另一个目录中。但是,我希望创建第二个目录中的目录结构以匹配第一个目录。

查找 /srcdir/ -links 1 -exec ln {} /dstdir/ \;

硬链接所有文件,但不创建我需要的目录。

如果目录仅包含已具有多个链接的文件,则无需在目标中创建该目录。

linux bash shell-script

4
推荐指数
1
解决办法
1185
查看次数

Bash 历史记录 - 通过字符串获取最后一个命令,包含空格

我知道 bash 功能 !text,它运行以“text”开头的最后一个命令。但当“文本”包含空格时,它似乎不起作用。有时,搜索包含空格的内容很有用。

例如:

history | grep ping
  514  ping 192.168.100.2
  515  ping 192.168.100.3
  516  ping 192.168.100.4
  517  ping google.com
  518  ping 192.168.100.5
  519  ping 192.168.100.6
  520  ping 192.168.100.7
Run Code Online (Sandbox Code Playgroud)

我想使用 ! 来调用线路“ping google.com”。特征。我尝试了一些事情,但失败了:

这是标准行为,它运行最后一个 ping 命令

/root# !ping  
ping 192.168.100.7
Run Code Online (Sandbox Code Playgroud)

一个简单的字符串,后面有空格!不起作用

/root# !ping google
ping 192.168.100.7 google
Run Code Online (Sandbox Code Playgroud)

据我所知,引号告诉 bash 将带有空格的字符串解释为单个字符串,而不是 2 个单独的字符串。但在这里它并没有按预期工作。

/root# !"ping google"
bash: !"ping: event not found

/root# !'ping google'
bash: !'ping: event not found

/root# "!ping google"
"ping 192.168.100.7 google google"

/root# '!ping google'
bash: …
Run Code Online (Sandbox Code Playgroud)

bash shell

4
推荐指数
1
解决办法
1017
查看次数

如何从 Bash 脚本运行“yum -y update”?

当我尝试从 Bash 脚本运行“yum -y update”时,它不起作用。

脚本如下所示。

#!/usr/bin/
echo "--> Updating CentOS System"
yum -y update
Run Code Online (Sandbox Code Playgroud)

我用这个命令运行脚本。

bash script.sh
Run Code Online (Sandbox Code Playgroud)

我得到以下输出。

Loaded plugins: fastestmirror, refresh-packagekit, security
. Please use /usr/bin/yum --help.
Run Code Online (Sandbox Code Playgroud)

CentOS 6 FINAL 通过文本提示安装。我从文本提示中以 root 身份登录,然后启动 x 进入 GUI 桌面。

但是当我直接在终端中运行相同的命令时它会起作用吗?

我已经用谷歌搜索过,但不确定我是否在谷歌上搜索了正确的术语。

感谢您的帮助。

linux bash

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

在选择 while 循环时更新 sqlite 数据库

有一个 bash 脚本将对引用 sqlite 数据库的文件执行“一些魔法”\xe2\x84\xa2,并且在执行“一些魔法”\xe2\x84\xa2 后,应该更新数据库。这是简化的代码

\n\n
sqlite3 database.db "select NUMBER from table WHERE STATUS = \'N\'" | while read line; do\n    SELECTION=$(echo $line | awk -F\'|\' \'{ print $1 }\')\n    [some magic]\xe2\x84\xa2\n    sqlite3 database.db "update table SET STATUS=\'Y\' WHERE NUMBER=\'$SELECTION\'"\ndone\n
Run Code Online (Sandbox Code Playgroud)\n\n

一切正常,sqlite 数据库将被逐行读取,我可以对引用的文件执行“一些魔法”\xe2\x84\xa2,但我可以\xc2\xb4t 更新数据库中的行 - I\xc2\xb4ve出现错误:

\n\n
\n

错误:数据库已锁定

\n
\n\n

有人知道我如何在读取数据库时更新数据库吗?或者还有其他解决方案可以让我做到这一点吗?

\n

script bash sqlite bash-scripting

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

Subshel​​l 不能像缩进那样工作

我有一些这样的文件:

??? abc.conf
??? def.conf
??? xyz.conf
??? 10-abc.conf.postix
??? 10-def.conf.postix
Run Code Online (Sandbox Code Playgroud)

我想.postfix从所有以10-. 为了在不安装任何工具的情况下执行此操作,我尝试使用bash,find和来执行此操作sed

我建立了这个:

$ find . -name "10-*.conf.postfix" -exec mv '{}' $(echo {} | sed -E 's/(.*)\.postfix$/\1/') \;
Run Code Online (Sandbox Code Playgroud)

但它失败了,因为mv-command 将呈现为:

$ mv '10-abc.conf.postix' 10-abc.conf.postix
Run Code Online (Sandbox Code Playgroud)

如果我在我的子 shell 中测试代码,那么它会按预期工作(它返回不带 的文件名.postifx)。我不确定出了什么问题。你对我有什么暗示吗?

bash sed find

4
推荐指数
1
解决办法
185
查看次数

将`dot` 生成的图形复制到剪贴板(例如 png)

我经常发现自己想要制作一个快速图表来说明依赖关系或过程。 dot这样做很好,但是如果我可以将渲染图直接生成到剪贴板而不是生成临时文件,那会方便得多。

理想情况下,我想要类似的东西

echo "graph {a--b; b--c;}" | dot -Tpng | xclip
Run Code Online (Sandbox Code Playgroud)

这个命令写得不太好 - 复制的数据不会粘贴到通常接受粘贴图像的应用程序中。

有什么技巧可以dot产生可粘贴到应用程序中的输出吗?

作为切线,也许是为了解决我问题根源的知识差距,是什么让图像“可粘贴”开始?我上面的命令与在 Web 浏览器中右键单击图像并选择 之间有什么区别Copy Image

linux png clipboard bash graphviz

4
推荐指数
1
解决办法
209
查看次数