Questions tagged «bash»

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


4
更改bash提示
确定bash提示外观的设置在哪里?特别是在Arch上,但是我敢肯定其他人也会想知道其他发行版是否有所不同。 尤其是我想使用(K)Ubuntu的提示
9 bash  prompt 

1
SSH会话中的Bash自动完成
当我从SSH登录到计算机时,bash似乎不希望自动完成命令(现在让我烦恼的是没有自动完成apt-get)。是否有一些设置可以让bash在ssh会话中自动完成?

3
bash PS1设置
我正在尝试按以下方式配置PS1。 绿色=“ \ [\ e [32; 1m \]” 红色=“ \ e [0; 31m” Purple =“ \ e [0; 35m” STARTCOLOR =“ \ [\ e [40m \]” ENDCOLOR =“ \ [\ e [0m \]” export PS1 =“ $ STARTCOLOR $ Green \ u @ $ Purple \ h $ Red \ …
9 bash  prompt 

1
我想将stdin传递给bash脚本,传递给在该bash脚本中调用的python脚本
我有一个bash脚本正在调用一个Python脚本,我想file通过stdin 来提供其内容。像这样调用bash脚本: ./script.sh < file 和的内容script.sh: #! /usr/bin/env bash pushd /some/python/virtual/environment/working/dir source venv/bin/activate python main.py ?????? deactivate popd 我不知道要填写什么,??????以file将给定的内容作为stdin传递给bash 脚本main.py。 请注意,file可以大幅文本文件,并使用bash的read是不理想的。 要求在调用bash脚本时使用stdin。我很灵活地将任何东西传递给main.py。 有什么想法可以解决这个难题吗? 加成 @cas的回答使我很清楚,我还需要解释在哪种情况下尝试使用script.sh。 我想script.sh用作中的转发脚本~/.forward,内容如下: |/path/to/script.sh 哪个后缀调用为/path/to/script.sh; 日志很清楚。使用简化版本的python脚本的简单测试,例如: |/path/to/simple/main.py 证明后缀确实会main.py在标准输入上调用邮件的内容。但是这种组合似乎不起作用。

1
在复合命令中设置bash选项
我发现extglob在复合化合物中设置shell选项会导致后续的抗glob失败。是否需要在复合命令之外设置外壳程序选项?在bash手册页中没有看到这样要求的指示。 例如,以下脚本可以正常工作(打印a.0 a.1): #!/bin/bash touch a.0 a.1 \ a.b.0 a.b.1 shopt -s extglob ls "a."!(b*) 但是,如果最后两行作为复合命令执行,则脚本将失败,并出现以下错误: syntax error near unexpected token `(' ` ls "a."!(b*)' 使用4.2到4.4的bash版本以及各种复合命令对此进行了测试: (1)有条件的- if #!/bin/bash touch a.0 a.1 \ a.b.0 a.b.1 if true; then shopt -s extglob ls "a."!(b*) fi (2)大括号- { } #!/bin/bash touch a.0 …
9 bash  shopt 

1
将关联数组作为参数列表传递给脚本
在脚本中,我有一个类似的关联数组: declare -A VARS=( ["key1"]="value1" ["key2"]="value" ) 是否有单个命令将其转换为以下形式的参数列表 --key1=value1 --key2=value2 无需手动重写 --key1="${VARS[key1]}" --key2="${VARS[key2]}" 我想到的用例是将数组作为参数列表传递给脚本,例如 my_script.sh $(to_param_list $VARS) 为了扩展我对@Kusalananda答案的评论,我的确切用例如下:我有一个脚本,该脚本用于使用makeself来构建自解压安装程序,该脚本接收一些参数,这些参数将在以下参数之间进行分隔: 脚本本身的参数 自解压安装程序中安装程序的参数 然后,脚本将按以下方式构建安装程序: to_param_list installer_param_list installer_param_array ./makeself ./path/to/sourcedir ./path/to/created/installer "My installer" ./path/to/install/inside/package "${installer_param_list[@]}" 但是,我已经使用包中的一个非常简单的安装程序脚本测试了传递的参数: while ! -z "$1" ; do echo "$1" shift done 并传递一个像这样的数组: installer_param_array=( ["upgrade-from"]="19 .2.0" ["upgrade-to"]="19.3.0" ) 结果如下: --upgrade-to=19.3.0 …

1
在控制台中与上一个回显相同的位置打印某些内容,并带有负向回显
在bash中,您可以强制转换为clear清除所有屏幕命令的命令。 并且,echo您可以在屏幕上打印任何内容。 在我的简单脚本中,我经常需要打印命令执行的百分比。 所以我可以做类似的事情。 echo "89%" echo "90%" echo "91%" 等等.. 我讨厌让屏幕充满百分比更新... 89% 90% 91% ... 我想了解的是是否有特殊的字符组合(例如“ \ 033 [01; 31m”),可以通过bash或php echo进行回显,并告诉控制台“删除上一个先前打印的字符。” 通过使用类似这样的方法:(php示例) echo str_repeat($neg_character, strlen($last_percentage_update_string)); echo $new_percentage_update_string; 我将把新的字符串打印在上一个字符串的确切位置上,而无需在屏幕上充满一行 否则,我会寻找一种始终使用bash和php脚本以其他方式执行相同操作的方法(请至少使用debian9控制台和php7包括实际的工作示例)
9 linux  bash  php  console 

3
在read驱动的while循环中使用read作为提示?
我有一个用例,我需要在每次迭代开始时读入多个变量,并将用户的输入读入循环。 我不知道如何探索的解决方案的可能路径- 对于分配,请使用另一个文件句柄而不是stdin 使用for循环而不是... | while read ......我不知道如何在for循环内分配多个变量 echo -e "1 2 3\n4 5 6" |\ while read a b c; do echo "$a -> $b -> $c"; echo "Enter a number:"; read d ; echo "This number is $d" ; done

5
在知道字符串的一部分的情况下查找字符串并返回字符串
例如,我有一个字符串 "Icecream123 AirplaneBCD CompanyTL1 ComputerYU1" 假设我知道我的字符串肯定包含子字符串IceCream,但我不知道它后面是什么。 在我的示例中,它可能是123,或者可能有所不同。 虽然我可以使用grep通过以下命令来检测字符串中是否存在“ Icecream”子字符串 echo $string | grep -oF 'Icecream'; 哪个会打印 Icecream 我想要一个命令来打印整个子字符串,在我的示例中是 Icecream123 当然,冰淇淋发生后的情况是随机的,并且事先未知,所以我不能做 $SUBSTRING=$(echo $string | grep -oF 'Icecream') $SUBSTRINGTRAIL=123 echo $SUBSTRING$SUBSTRINGTRAIL

1
脚本中是否禁用了历史记录扩展?
我了解以下错误是由于!用于历史记录扩展而导致的: $ echo "Hello!Tim" bash: !Tim: event not found 但是,如果将命令放入脚本中并运行该脚本,则不会出现问题: $ cat myscript echo "Hello!Tim" $ bash myscript Hello!Tim 这是为什么?bash手册中是否提到了原因?

4
如何保存和还原所有外壳程序选项,包括errexit
我已经在各种堆栈交换站点和UNIX帮助论坛上通读了许多有关如何修改Shell选项然后恢复它们的问题-我在这里找到的最全面的解决方法是如何“撤消” set -x`? 在收到的智慧似乎是要么保存过的结果set +o或shopt -po再eval后来恢复到以前的设置。 但是,在我自己使用bash 3.x和4.x进行的测试中,errexit执行命令替换时未正确保存该选项。 这是显示问题的示例脚本: set -o errexit set -o nounset echo "LOCAL SETTINGS:" set +o OLDOPTS=$(set +o) echo echo "SAVED SETTINGS:" echo "$OLDOPTS" 和输出(我修剪掉了一些不相关的变量): LOCAL SETTINGS: set -o errexit set -o nounset SAVED SETTINGS: set +o errexit set -o nounset 这似乎非常危险。errexit如果有任何命令失败,我编写的大多数脚本都会停止执行。我只是在其中一个脚本中发现了一个由此引起的错误,该错误原本应该errexit在最后恢复,但此功能将覆盖它,并在脚本持续时间内将其设置为默认关闭状态。 我想做的是编写可以根据需要设置选项的函数,然后在退出之前正确还原所有选项。但是,似乎在命令替换调用的子外壳中,errexit是不会被继承的。 我不知道如何保存结果set +o而不使用命令替换或跳过FIFO箍。我可以阅读,$SHELLOPTS但不是可写或eval-able格式。 我知道一种替代方法是使用subshel​​l函数,但是这给能够记录输出以及传递多个变量带来了很多麻烦。 …
9 bash  shell 

1
bash,并期望在同一脚本中?
我正在尝试编写一个脚本,该脚本从.csv文件中获取IP地址并通过telnet设备以捕获“显示版本”命令输出。 到目前为止,我已经对此进行了编码: #!/bin/bash #!/usr/bin/expect -f FILE1=dispositivos.csv #file with IP's and device name set Username "user" #this is the user for telnet connection. set Password "this.is.the.pass" #pass for telnet connection. NUMERODISP="$(wc -l $FILE1 | awk '{print $1}')" #this command counts number of devices (IP's) in the file as it is a …


2
在Shell中守护进程?
http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/给出了在bash中守护进程的示例: $ nohup firefox& &> /dev/null 如果我正确的话,该命令与“ nohup和后台进程”相同。但是,守护进程是否仅是经过预配置和后台运行的进程? 这里缺少什么步骤来守护进程? 例如,守护进程时是否不需要更改父进程?如果是,您将如何使用bash进行操作?我仍在尝试理解相关的回复https://unix.stackexchange.com/a/177361/674。 还有哪些其他步骤和条件? 看到我相关的问题https://stackoverflow.com/q/35705451/156458
9 linux  bash  daemon 

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.