我正在使用 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存档文件中提取和安装软件包?
已经有类似的问题,但我发布这个是因为没有一个答案有效。我正在编写一个 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) 所以我在 Windows 上的 Unbuntu 上使用 Bash 来学习 Linux,所以我尝试编辑 .bashrc 文件作为一种学习方式。为此,我进入了 C: 驱动器中的根文件夹,并在 VS Code 中打开了 .bashrc。我在文件末尾添加了一行。
当我尝试运行 ubuntu 时,我遇到了这个错误(即使它仍然有效),即使我尝试撤消之前的操作,错误仍然存在。怎么了?
bash permissions bashrc windows-10 windows-subsystem-for-linux
我正在尝试运行托管在 github 上的远程 bash 脚本:
wget -O - https://raw.githubusercontent.com/xxxxx/script.sh
Run Code Online (Sandbox Code Playgroud)
一切正常,没有问题
但是当我更新上面的脚本并运行相同的命令时,它会处理旧脚本
我试过--no-cache, --delete-after, 没有成功
如何每次都获得 wget 的新副本?
在我的一些终端窗口中,我在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) 关于如何创建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) 我需要在sudo su -<someuser>要求输入密码的shell 脚本中实现自动化。
如何直接向 IBM AIX 服务器的 sudo su - in shell 脚本提供密码。我试过使用echo <password> | sudo su -<someuser>它没有用
。请对此提供帮助。
我有从 Linux 上的 shell 运行的 python 进程。目前我无法物理访问这台机器,只能通过 ssh 连接。
我知道 python 进程停止了,我怀疑这个 shell 中存在错误跟踪。
我可以获得 shell 的 pid,但我找不到显示此 shell 中内容的方法。基本上,我正在寻找一种方法来读取已经存在的内容,并且不会丢失此输出或关闭外壳。什么是 Linux 工具可以对已经运行的 shell 中发生的事情有第二个看法?
我在我的 .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)
先感谢您。
我在 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.