Tag: bash

如何在shell脚本中运行别名?

我有一个可执行文件mpiexec ,其完整路径为~/petsc-3.2-p6/petsc-arch/bin/mpiexec 。 由于我想在不同的目录中执行此命令(无需重新键入整个路径),我在我的家.bashrc文件中设置了一个别名: alias petsc=”~/petsc-3.2-p6/petsc-arch/bin/mpiexec” 这允许我通过键入以下内容轻松地在命令提示符下执行此mpiexec文件: petsc myexecutable 我尝试使用我的新别名petsc作为命令编写一个名为script的shell脚本文件。 在为我的shell脚本提供适当的权限(使用chmod )之后,我尝试运行该脚本。 但是,它给了我以下错误: ./script: line 1: petsc: command not found 我知道我可以写出mpiexec文件的完整路径,但是每次编写一个新脚本时编写完整路径都很麻烦。 有没有办法可以在脚本文件中使用我的别名petsc ? 有没有办法可以编辑我的.bashrc或.bash_profile来实现这一目标?

如何让长命令行换行到下一行?

我在Ubuntu中注意了很长一段时间让我感到沮丧的事情是,当我在命令行输入一个比终端宽度更长(更宽)的命令,而不是换行到新行时,它会回到第1列在同一行,并开始覆盖我的命令行的开头。 (它实际上并没有覆盖实际命令,但在视觉上,它会覆盖显示的文本)。 没有看到它就很难解释,但是让我说我​​的终端是20个字符宽(我的更像是120个字符 – 但是为了一个例子),我想要回显英文字母。 我输入的是: echo abcdefghijklmnopqrstuvwxyz 但是在我按下键之前我的终端看起来像是: pqrstuvwxyzghijklmno 当我点击进入时,它回声 abcdefghijklmnopqrstuvwxyz 所以我知道命令已经正确收到了。 它只是在“o”之后包装我的打字并在同一行重新开始。 我期望发生的事情,如果我在一个只有20个字符宽的终端上键入此命令将是这样的: echo abcdefghijklmno pqrstuvwxyz 背景:我使用bash作为我的shell,我在〜/ .bashrc中有这一行: set -o vi 能够使用VI命令导航命令行。 我目前正在使用Ubuntu 10.10服务器,并使用Putty连接到服务器。 在我工作的任何其他环境中,如果我键入一个长命令行,当我的命令长于终端宽度时,它将在我正在处理的行下面添加一个新行,当我继续输入时,我可以看到我的命令2个不同的线。 但只要我记得使用Ubuntu,我的长命令只占用1行。 这也发生在我回到历史记录中的前一个命令时(我点击Esc,然后’K’返回上一个命令) – 当我到达一个比终端宽度更长的上一个命令时,命令行得到我不知道我在命令中的位置。 我发现看到整个长命令的唯一解决方法是点击“Esc-V”,它在VI编辑器中打开当前命令。 我认为我的.bashrc文件中没有任何奇怪的东西。 我注释掉了“set -o vi”这一行,我仍然遇到了问题。 我下载了Putty的新副本并没有对配置进行任何更改 – 我只是输入我的主机名来连接,我仍然有问题,所以我认为这与Putty没什么关系(除非我需要做一些配置更改) 有没有其他人有这个问题,谁能想到如何解决它? 编辑 这是我的.bashrc文件。 我已经在机器之间复制了相同的配置文件,并且我在我的$ PS1中使用了特殊字符,它们以某种方式将其丢弃。 我现在坚持使用PS1的标准bash变量。 感谢@ændrük获取.bashrc上的提示! …结束编辑…

是否有可能立即写入.bash_history?

我经常打开很多很多终端[现在我已经在这个工作区打开了7]我经常用grep搜索history来找到我刚刚写的命令,但我不想追捕终端然后向上滚动并追捕它等等。有时我的终端关闭而没有’退出’,我写的所有东西都丢失了[有时我需要一些我写在终端中的东西被杀死]。 那么有没有办法让每个终端立即写入.bash_history? 或至少一分钟,或类似的东西?

我可以将参数传递给别名命令吗?

我想知道我是否可以使用别名命令传递参数。 例如: alias d=”dmesg|grep -iw usb|tail -5″ 现在d将打印最后5行。 如果我想使用d打印不同数量的行,我必须再次在d的别名命令声明中进行更改。 有什么办法可以修改别名的声明,这样我就不必重新输入声明来改变行数。 比如在声明d别名时将行数作为参数合并? 还是有其他方法可以解决这个问题?

&>和2>&1之间有什么区别

将标准输出和标准错误重定向到标准输出有两种forms。 但哪一个更好? 为什么&>被认为是完美的? 我找不到有什么区别,所以许多教程甚至bash手册说明&>更好! 那么我为什么要使用&>而不是2>&1 主要使用bash shell 编辑:感谢评论员 只有>&在csh或tcsh中工作 在ksh中只有2>&1有效。 短划线使用>文件2>&1重定向 然后使用哪一个来确保我的脚本与其他系统兼容,无论使用的shell是什么!

Pytest在PATH中但未找到

我已经为python测试安装了pytest,但是当我只是试图从项目文件夹中运行它时,我得到了No such file or directory错误。 它位于一个应该可以通过PATH变量访问的位置,但是(尽我所能描述问题)并没有“找到”。 出于某种原因,当我输入’pytest’时,我的shell正在寻找错误的位置; 如果我指定位置,那么pytest将运行良好。 在/usr/bin查找 kirk@kirk:~/develop/foo$ pytest bash: /usr/bin/pytest: No such file or directory 它实际上位于/usr/local/bin ,它是路径的一部分,并在我明确调用该位置时起作用。 kirk@kirk:~/develop/foo$ whereis pytest pytest: /usr/local/bin/pytest kirk@kirk:~/develop/foo$ echo $PATH /home/kirk/bin:/home/kirk/.local/bin:/usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin kirk@kirk:~/develop/foo$ /usr/local/bin/pytest ============================= test session starts ============================== platform linux2 — Python 2.7.12, pytest-3.0.5, py-1.4.32, pluggy-0.4.0 rootdir: /home/kirk/develop/foo, inifile: pytest.ini collected 0 items ========================= no tests […]

脚本如何检查它是否以root身份运行?

我正在编写一个简单的bash脚本,但我需要它来检查它是否以root身份运行。 我知道这可能是一种非常简单的方法,但我不知道如何做到这一点。 要明确一点: 编写脚本foo.sh的简单方法是什么,以便命令./foo.sh输出0 ,命令sudo ./foo.sh输出1 ?

在输出文件中包含命令?

对不起,令人困惑的标题! 假设我跑了 apt-cache depends kde-window-manager > ~/Desktop/kwin-depends 我将在我的桌面文件夹中获得一个名为“kwin-depends”的文件。 是否有一些技巧可以包含我作为文件的一部分发出的命令,最好是在文件的开头? 所以,至少在14.04 LTS中,前几行看起来像这样: apt-cache depends kde-window-manager > ~/Desktop/kwin-depends kde-window-manager Depends: kde-runtime Depends: libc6 |Depends: libegl1-mesa Depends: 而不是像这样: kde-window-manager Depends: kde-runtime Depends: libc6 |Depends: libegl1-mesa Depends:

为什么Ubuntu的默认〜/ .profile源〜/ .bashrc?

这些是我的13.10附带的股票~/.profile的内容(删除了注释行): if [ -n “$BASH_VERSION” ]; then if [ -f “$HOME/.bashrc” ]; then . “$HOME/.bashrc” fi fi if [ -d “$HOME/bin” ] ; then PATH=”$HOME/bin:$PATH” fi 这是inheritance自Debian但为什么Canonical决定保留它? 据我所知,它不是标准的* nix方式,我已经看到了各种系统没有发生这种情况,所以我认为它们必须有充分的理由。 这可能会导致运行登录shell时出现意外行为(例如,当sshing进入计算机时)用户不希望有~/.bashrc来源。 我能想到的唯一好处是不要将用户与许多启动文件混淆,并允许他们单独编辑.bashrc并且无论shell类型如何都可以读取。 然而,这是一个可疑的好处,因为对于登录和交互式shell具有不同的设置通常是有用的,这阻止了您这样做。 此外,登录shell通常不会在图形环境中运行,并且可能导致错误,警告和问题(哦,我的!),具体取决于您在这些文件中设置的内容。 那么为什么Ubuntu这样做,我错过了什么?

如何查看附加到bash别名的命令?

假设我在bash shell中有别名。 是否有一个简单的命令来打印别名将运行的命令?