标签: bash

如何从 .t​​ar.lz 文件安装包

我正在使用 bash(特别是 Cygwin)。我正在尝试安装GNU dd_rescue,它包含在一个.tar.lz存档文件中。

当我使用:

tar -xzf ddrescue-1.22.tar.lz
Run Code Online (Sandbox Code Playgroud)

...它返回以下错误:

gzip:stdin:不是 gzip 格式
tar:子返回状态 1 tar:
错误不可恢复:现在退出

当我使用:

tar --lzip -xf ddrescue-1.22.tar.lz
Run Code Online (Sandbox Code Playgroud)

...它返回:

tar(子):lzip:无法执行:没有这样的文件或目录
tar(子):错误不可恢复:现在退出
tar:子返回状态 2
tar:错误不可恢复:现在退出

如何从lzip存档文件中提取和安装软件包?

linux cygwin bash tar packages

3
推荐指数
1
解决办法
6599
查看次数

如何强制 bash 脚本等待用户回答?

已经有类似的问题,但我发布这个是因为没有一个答案有效。我正在编写一个 bash 脚本来自动在我的 Arch 系统上安装 pacman 和 AUR 包。这个想法是首先逐行读取包名称的文件(myfile),然后逐字读取并为每个单词执行安装。这适用于吃豆子,但不适用于 AUR Helper (aurman)。aurman 的部分如下所示:

while read line; do
if [[ "$line" =~ \$[[:space:]]aurman[[:space:]]-S[[:space:]][[:alnum:]]* ]]
then
    aurline=$(echo "$line" | awk '{ $1=""; $2=""; $3=""; print}' | sed 's/^ *//')
    for aurpkg in $aurline
    do
       sudo -u "${my_user}" bash << EOF
aurman -S --noconfirm --needed --noedit "$aurpkg"
wait
EOF
    done
fi
done < "$myfile"
Run Code Online (Sandbox Code Playgroud)

使用选项--noconfirm --needed --noedit aurman 不会提示我输入是/否,但对于某些软件包,它会提示我输入一个数字。所以问题是在这种情况下脚本不等待,包没有被安装并且 aurman 产生错误“EOFError: EOF when reading a line”。我试图像这样暂停脚本:

aurman ...
wait
Run Code Online (Sandbox Code Playgroud)

或者像这样:

aurman ... …
Run Code Online (Sandbox Code Playgroud)

linux script bash

3
推荐指数
1
解决办法
1279
查看次数

Windows 上的 Ubuntu 上的 Bash 在启动时给出错误“-bash:/home/user/.bashrc: Permission denied”

所以我在 Windows 上的 Unbuntu 上使用 Bash 来学习 Linux,所以我尝试编辑 .bashrc 文件作为一种学习方式。为此,我进入了 C: 驱动器中的根文件夹,并在 VS Code 中打开了 .bashrc。我在文件末尾添加了一行。

当我尝试运行 ubuntu 时,我遇到了这个错误(即使它仍然有效),即使我尝试撤消之前的操作,错误仍然存​​在。怎么了?

bash permissions bashrc windows-10 windows-subsystem-for-linux

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

wget 不保留缓存

我正在尝试运行托管在 github 上的远程 bash 脚本:

wget -O - https://raw.githubusercontent.com/xxxxx/script.sh
Run Code Online (Sandbox Code Playgroud)

一切正常,没有问题

但是当我更新上面的脚本并运行相同的命令时,它会处理旧脚本

我试过--no-cache, --delete-after, 没有成功

如何每次都获得 wget 的新副本?

linux bash wget shell-script

3
推荐指数
1
解决办法
4175
查看次数

如何从 $PATH 中删除重复的目录?

在我的一些终端窗口中,我在PATH变量中有重复的条目;像这样:

PATH=/a/b:/c/d:/a/b:/c/d:/e/f:/a/b
Run Code Online (Sandbox Code Playgroud)

我想罪魁祸首是我的一些脚本中的这样一行:

PATH=/a/b:$PATH
Run Code Online (Sandbox Code Playgroud)

在采购这个和那个之后,这又PATH变得很长。这个问题:

是否有bash清理PATH和类似环境变量的命令?它应该是一个bash脚本,因为你不能执行一个实用程序并期望它改变调用 shell 的环境。

在上面的示例中,清理后的内容PATH应如下所示:

PATH=/a/b:/c/d:/e/f
Run Code Online (Sandbox Code Playgroud)

linux bash path

3
推荐指数
1
解决办法
2118
查看次数

焦油有进展但没有压缩

关于如何创建tar.gz带有进度更新的文件有很多答案(即这个答案,复制在下面)

tar cf - /folder-with-big-files -P | pv -s $(du -sb /folder-with-big-files | awk '{print $1}') | gzip > big-files.tar.gz
Run Code Online (Sandbox Code Playgroud)

但是,如果我像这样在没有压缩的情况下对文件进行焦油处理,我如何查看进度

tar -cvf output.tar folder/to/tar
Run Code Online (Sandbox Code Playgroud)

bash tar progress ubuntu

3
推荐指数
1
解决办法
4456
查看次数

如何在 shell 脚本中直接向 sudo su -&lt;someuser&gt; 提供密码

我需要在sudo su -<someuser>要求输入密码的shell 脚本中实现自动化。

如何直接向 IBM AIX 服务器的 sudo su - in shell 脚本提供密码。我试过使用echo <password> | sudo su -<someuser>它没有用 。请对此提供帮助。

linux sudo bash shell

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

回顾性地查看另一个 shell 的 bash 输出

我有从 Linux 上的 shell 运行的 python 进程。目前我无法物理访问这台机器,只能通过 ssh 连接。
我知道 python 进程停止了,我怀疑这个 shell 中存在错误跟踪。
我可以获得 shell 的 pid,但我找不到显示此 shell 中内容的方法。基本上,我正在寻找一种方法来读取已经存在的内容,并且不会丢失此输出或关闭外壳。什么是 Linux 工具可以对已经运行的 shell 中发生的事情有第二个看法?

linux bash shell

3
推荐指数
1
解决办法
554
查看次数

Vim - 我可以在不编写函数的情况下将多个参数传递给自定义命令吗

我在我的 .vimrc 文件中编写了以下自定义命令:

command! -nargs=+ Sub :%s/<args>/g
Run Code Online (Sandbox Code Playgroud)

它允许我用一个词替换另一个词并执行如下:

:Sub <word>/<new word>
Run Code Online (Sandbox Code Playgroud)

我更喜欢用多个参数编写命令,如下所示:

:Sub <word> <new word>
Run Code Online (Sandbox Code Playgroud)

我可以重写命令以接受多个参数吗?

理想情况下,我想要这样的东西:

command! -nargs=+ Sub :%s/<arg1>/<arg2>/g
Run Code Online (Sandbox Code Playgroud)

先感谢您。

linux bash vim command-line vimscript

3
推荐指数
1
解决办法
3668
查看次数

如何在 macOS 的 Fish 中将特定版本的 Java 设置为 JAVA_HOME

我在 macOS 上使用 Bash 作为我的默认 shell,但我决定切换到 Fish。

我正在尝试在不同版本的 Java 之间切换。在 bash 中,它是使用~/.bash_profile

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
Run Code Online (Sandbox Code Playgroud)

我在 Fish 上设置了等价物 ~/.config/fish/fish_variables

set -x JAVA_HOME `/usr/libexec/java_home -v 1.7`
Run Code Online (Sandbox Code Playgroud)

不幸的是,Java 版本并未更改。如何使用~/.config/fish/fish_variables?设置环境变量(特别是特定版本的 Java)?

更新:

根据常见问题解答~/.config/fish/fish_variables~/.config/fish/config.fish应该使用,而不是。我也创建了~/.config/fish/fish.config而不是~/.config/fish/config.fish.

java bash fish macos

3
推荐指数
1
解决办法
3509
查看次数