Questions tagged «bash»

与其他Bourne / POSIX shell相对,GNU的Bourne Again SHell特有的问题。对于一般关于Unix shell的问题,请改用/ shell标记。

2
.bashrc被覆盖,但仍是源文件—如何恢复它?
通常,当我找到要别名的命令时,便将其回显到.bashrc中,如下所示: [up button pressed to last command, then line edited so that it reads] $echo "command-i-just-did" >> ~/.bashrc 可能有更好的方法来执行此操作。但是无论如何,刚才我只使用了一个人字形覆盖了整个.rc文件。但是,由于.bashrc仍是当前版本,它仍然接受我的旧别名(当然,现在是这样)。那么有没有办法恢复呢?

6
为什么bash在Linux上是标准的?
最新的Linux发行版将bash作为默认外壳,尽管还有其他(可以说)更好的外壳可用。 我试图了解这是否是一些人都不想更改的历史遗留物,还是有一些充分的理由使bash成为首选?
19 linux  bash 

3
如何删除交互式外壳中的路径的一部分?
bash和zsh中是否有删除路径中一个组成部分的快捷方式?例如,如果我键入ls ~/local/color/,并且光标位于行的末尾,是否有快捷方式删除该行color/的末尾?理想情况下,我需要vi模式和emacs模式下的解决方案
19 bash  shell  zsh 

6
创建文件的Shell脚本(如果不存在)?
我需要创建一个Shell脚本来检查文件是否存在,如果不存在,请创建该文件并继续执行下一个命令,或者仅继续进行下一个命令。我所没有做的。 #!/bin/bash # Check for the file that gets created when the script successfully finishes. if [! -f /Scripts/file.txt] then : # Do nothing. Go to the next step? else mkdir /Scripts # file.txt will come at the end of the script fi # Next command (macOS preference setting) defaults …
19 bash  shell-script  osx 

2
Bash .hushlogin,保留上次登录时间和主机
在公司中,当我登录到某些服务器时,将显示我的上次登录名和一个巨大的横幅: me@my-laptop$ ssh the-server Last login: Mon Feb 8 18:54:36 2016 from my-laptop.company.com ************************************************************************ * * * C O M P A N Y I N F O R M A T I O N S Y S T E M S * * * * !WARNING! Your connection has …
19 bash  login  motd 

4
“备份” $ IFS变量是否明智?
我总是很犹豫,$IFS因为它正在破坏全球市场。 但是,这通常使将字符串加载到bash数组中变得简洁明了,而且对于bash脚本而言,简洁性很难实现。 因此,我认为如果尝试将“开始”内容“保存” $IFS到另一个变量,然后在用完$IFS某些东西后立即将其还原,那总比没有好。 这可行吗?还是从本质上讲毫无意义,我应该直接将其设置IFS为后续使用所需的任何内容?

4
bash:如何在流程替换中传播错误?
我希望我的Shell脚本每执行一个命令失败就会失败。 通常,我这样做的方法是: set -e set -o pipefail (通常我set -u也添加) 关键是上述方法都不能用于流程替换。这段代码显示“ ok”,并以返回代码= 0退出,但我希望它失败: #!/bin/bash -e set -o pipefail cat <(false) <(echo ok) 除了流程替代之外,还有什么等同于“ pipefail”的东西?还有其他方法可以将命令的输出作为文件传递给命令,但是每当这些程序出现故障时都会引发错误? 穷人的解决方案是检测那些命令是否写入stderr(但在成功的情况下某些命令写入stderr)。 另一个与posix兼容的解决方案将使用命名管道,但是我需要放宽这些命令的使用过程,因为oneliners是由编译后的代码动态构建的,而创建命名管道会使事情复杂化(额外的命令,捕获错误,删除它们,等等)

8
调用多个bash脚本并并行运行,而不是依次运行
假设我有三个(或更多)的bash脚本:script1.sh,script2.sh,和script3.sh。我想调用所有这三个脚本并并行运行它们。一种方法是仅执行以下命令: nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (通常,脚本可能需要几个小时或几天才能完成,所以我想使用nohup它们,以便即使我的控制台关闭也可以继续运行。) 但是,有什么方法可以通过一次调用并行执行这三个命令? 我在想类似 nohup bash script{1..3}.sh & 但这似乎是按顺序执行script1.sh,script2.sh而script3.sh不是并行执行。

3
有没有办法从命令行展平.pdf图像?
在GIMP中,我可以导入.pdf,然后使用GUI通过在“图像”(Image)下拉菜单中选择“平面图像”(Flatten Image)将其展平(如果它是由多层构成的)。然后,我可以使用新文件名导出.pdf。 我想使它自动化。有什么办法可以通过终端吗?

2
如何以其他用户身份运行?
这是应运行的bash代码。因此,首先它将用户替换为openproject,然后运行所有代码 su openproject -c "bash -l" cd ~/openproject git checkout Gemfile.lock git pull bundle install RAILS_ENV="production" bundle exec rake db:migrate RAILS_ENV="production" bundle exec rake db:seed RAILS_ENV="production" bundle exec rake assets:precompile 我尝试将上面的脚本修改为: su - openproject -c "cd ~openproject/openproject" su - openproject -c "git checkout stable" su - openproject -c "git checkout …
19 bash  debian  sudo  su 

6
如何在运行时仅从bash脚本中打印某些命令?
我有一个bash脚本,其中包含基于调用时传递的命令行参数的各种if语句。关于正在运行的命令有某种输出有助于确认所有if语句的流程,但是我当前的解决方案给了我太多信息。 set -v在脚本中使用有助于查看在脚本中运行时打印到屏幕上的命令,但是我得到的命令太多。它几乎就像是脚本的完整副本。 我希望输出显示正在运行的命令,但是我不想看到注释,换行符,if语句中的表达式等。 有没有一种方法可以在打印之前先使-v选项生成的所有可能的输出通过正则表达式?还是其他一些使bash仅输出特定“类型”命令的解决方案(例如,使用可执行文件而不仅仅是bash特定的语句,注释等)? [1] /programming/257616/sudo-changes-path-why在此方面非常有帮助,也是我得到使用建议的地方set -v。 编辑: 与我正在运行的脚本类似(但不完全相同)的脚本: #!/bin/bash #get verbose command output set -v env=$1 if [ "$env" == "dev" ]; then python ascript.py fi if [ "$env" == "prod" ]; then #launching in prod will most likely fail if not run as root. Warn user if …

5
如何检测到getopts没有传递任何选项?
我有此代码- #getoptDemo.sh usage() { echo "usage: <command> options:<w|l|h>" } while getopts wlh: option do case $option in (w) name='1';; (l) name='2';; (h) name='3';; (*) usage exit;; esac done print 'hi'$name 当我运行时bash getoptDemos.sh(不带选项),它将打印hi而不是调用函数usage。当给出w,h和l以外的选项时,它将调用用法。然后,如果未指定任何选项,它将无法正常工作。 我已经尝试使用?,\?,:到位的*,但我无法实现我想要的。我的意思是所有的docs上getopt说它使用?。 我究竟做错了什么?
19 bash  shell  options  getopts 

3
echo vs <<<,还是Bash Award中无用的echo?
到目前为止,cat奖的无用使用是众所周知的,并且还提到了无用的使用echo(与该问题无关)。我想知道是否应该有“无用的echoBash奖”:根据一些非常不科学的测量,管道似乎比heredocs和herestring慢得多: Heredocs: for reps in 1 2 3 do time for i in {1..1000} do cat &lt;&lt;'END' test string END done &gt; /dev/null done real 0m1.786s user 0m0.212s sys 0m0.332s real 0m1.817s user 0m0.232s sys 0m0.332s real 0m1.846s user 0m0.256s sys 0m0.320s 串 for reps in 1 2 3 do …

2
从命令提示符处执行if语句
在bash中,我可以执行以下操作: if [ -f /tmp/test.txt ]; then echo "true"; fi 但是,如果我sudo在前面添加,它将不再起作用: sudo if [ -f /tmp/test.txt ]; then echo "true"; fi -bash: syntax error near unexpected token `then' 我该如何运作?

4
bash:/ dev / stderr:权限被拒绝
升级到新发行版本后,我的bash脚本开始出现错误: bash: /dev/stderr: Permission denied 在以前的版本中的Bash将在内部承认这些文件的名称(这就是为什么这个问题不是重复这一个),并做正确的事(TM) ,但是,这现在已经不再工作。如何才能成功再次运行脚本? 我尝试将运行脚本的用户添加到组中tty,但这没有什么区别(即使注销并重新登录后也是如此)。 我可以在命令行上重现它,而不会出现问题: $ echo test &gt; /dev/stdout bash: /dev/stdout: Permission denied $ echo test &gt; /dev/stderr bash: /dev/stderr: Permission denied $ ls -l /dev/stdout /dev/stderr lrwxrwxrwx 1 root root 15 May 13 02:04 /dev/stderr -&gt; /proc/self/fd/2 lrwxrwxrwx 1 root root 15 May 13 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.