Questions tagged «bash»

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

1
在没有劫持提示的情况下从后台进程中回显进度
考虑简单的脚本hello: #!/bin/bash echo 'hello world!' 现在从bash开始,如果我尝试在后台运行此命令: $ hello & [1] 12345 $ hello world! █ <--- prompt is stuck here until I hit enter! [1]+ Done $ █ <--- prompt back to normal 我宁愿看到: $ hello & [1] 12345 [1]+ hello world! [1]+ Done $ █ <--- prompt normal the …

3
如何添加数字作为命令行参数?
我正在尝试从命令行添加1个数字,并像默认值一样添加一个数字。例如:当用户输入数字50时,脚本将添加10(作为默认数字)。 ./script 50 The sum of 50+ 10 is 60. 这是我到目前为止所拥有的。 echo -n "Please enter a number: " read number default = 10 sum = $((default + number)) // this line does not seem to work echo "The sum of $number and 10 is $sum." 我的语法是否错误?我不确定自己是否走对了。我把数字加错了吗?我应该改用awk吗? let sum = $default …
10 bash 

3
$ PWD发生任何更改后,如何在bash中运行命令?
zsh提供了一些不错的钩子函数,包括chpwd用于在用户更改目录后运行函数。 # zsh only function greet() { echo 'hi'; } chpwd_functions+=("greet") cd .. # hi pushd # hi popd # hi 我试图在bash中模拟它。 限制条件: 它必须在交互式和非交互式shell中都可以工作,我认为这意味着它不能依赖于 $PROMPT_COMMAND 它无法重新定义cd,因为我希望它可用于更改目录的任何命令(例如pushd和popd) 它必须在用户的命令之后运行,因此trap "my_function" DEBUG不起作用,除非我可以在其中以某种方式说“首先运行$BASH_COMMAND我们被困的设备,然后再执行此操作……”我看到可以避免自动运行$BASH_COMMAND if extdebug启用并且 trap函数返回1,但我不认为我想强制执行extdebug,并且返回1成功(但已修改)的命令似乎是错误的。 最后一部分-“在用户命令后运行”-是当前让我感到困惑的部分。如果我可以在每个命令之后运行一个函数,则可以让它检查自上次检查以来目录是否已更改。例如: function check_pwd() { # true in a new shell (empty var) or after cd if [ "$LAST_CHECKED_DIR" …
10 bash  hook  pwd 

3
在Bash中,如何不在别名中包含额外的参数?
我正在尝试做类似的事情 alias ftp='echo do not use ftp. Use sftp instead.' 只是为了避免ftp意外使用。但我注意到 ftp abcd.com 将导致命令回显 do not use ftp. Use sftp instead. abcd.com 因为将abcd.com视为是的参数echo。 有没有一种方法可以使Bash不添加abcd.com到替代项中,或者echo不将其作为额外的参数?(每种方法都有解决方案吗?) 我以为我可以做到 alias ftp='sftp' 但是我只想使命令全部停止,以提醒自己不要使用ftp。
10 bash  alias  ftp  echo 

2
如果未设置,则追加到类似PATH的变量而不创建前导冒号
我需要将目录附加到PKG_CONFIG_PATH。通常,我会使用标准 export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig 但PKG_CONFIG_PATH以前未在我的系统上设置过。因此,变量以一个:字符开头,该字符告诉该变量首先在当前目录中查找。我不要那个。我解决了以下问题, export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig 但这看起来太丑了。有没有更好的办法?当且仅当已设置变量时,有条件地附加冒号的适当方法是什么?

4
正则表达式使用\\与\
为什么 grep e\\.g\\. <<< "this is an e.g. wow" 和 grep e\.g\. <<< "this is an e.g. wow" 做同样的事情? 如果添加第三个斜杠,则结果也相同。但是,一旦我添加了第四个斜杠,它将不再起作用。这与旧的考试题有关。它询问带有两个反斜杠的那个是否可以输出带有“ eg”的行,我本来以为这行不行,但是我尝试确定并且确实如此。有什么解释?

1
历史记录-仅列出成功运行的命令
我想知道是否有一种方法可以使用history命令,但仅列出成功运行的命令。同样,是否有办法列出产生错误的错误? 我知道每个命令的退出状态为: 0-成功执行命令 1-由于扩展或重定向期间出错,命令失败,退出状态大于零。 2-错误的命令用法 12-找到命令但无法执行 127-找不到命令 并可以通过以下命令检查执行命令echo $? : http : //www.linuxnix.com/2011/03/find-exit-status-script-command-command-linux.html 例: 运行以下4条命令后: ls help lss ls nonexistentfile 我尝试测试仅打印成功的命令(退出状态为0),该命令应该仅为“ ls”和“ help”: for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; …

4
我可以在“ &&”之后的“ &&”之前引用命令吗?
不知道如何用其他方式表达问题,但是基本上,我经常发现自己正在运行一个命令,例如vagrant启动虚拟机,然后像下面这样使用ssh进入该命令: vagrant up && vagrant ssh 除了编写自己的函数或脚本之外,还有没有办法“重用” vagrant命令第二部分中的部分?
10 bash  zsh 

2
为什么源给出错误“无法执行二进制文件”
我有一个确实会初始化tmux会话然后创建一些窗口的小文件。经过一些调试和调整后,一切正常,直到我将文本文件(使用tmux命令)从重命名spam为xset: $ source xset bash: source: /usr/bin/xset: cannot execute binary file 我现在已将文件重命名回去并source spam可以再次使用,但是我想知道为什么会这样。该文件位于我的主目录中,而不是/usr/bin。
10 bash  shell 

4
为什么我不能`tail -f / proc / $ pid / fd / 1`?
我写了一个简单的脚本echo-es其PID: #/bin/bash while true; do echo $$; sleep 0.5; done 我3844在一个终端上运行上述脚本(反复说),并尝试在另一终端上运行tail文件描述符: $ tail -f /proc/3844/fd/1 它不会在屏幕上打印任何内容,并挂起直到^c。为什么? 另外,所有STD文件描述符(IN / OUT / ERR)都链接到相同的点: $ ls -l /proc/3844/fd/ total 0 lrwx------ 1 mg mg 64 sie 29 13:42 0 -> /dev/pts/14 lrwx------ 1 mg mg 64 sie 29 13:42 1 -> /dev/pts/14 lrwx------ …

6
ssh和运行命令的脚本不起作用
下面是脚本。 我想登录几台服务器并检查内核版本。 #!/bin/bash #input server names line by line in server.txt cat server.txt | while read line do sshpass -p password ssh root@$line << EOF hostname uname -r EOF done 我希望输出像.. server1_hostname kernel_version server2_hostname kernel_version 等等.. 我在server.txt中运行了约80个服务器的脚本 我得到的输出就像..... Pseudo-terminal will not be allocated because stdin is not a terminal. Pseudo-terminal …
10 bash  shell-script  ssh 

4
为什么即使$ 1不是1,也总是选择'if [$ 1 =“ 1”]'分支?
我有一个名为“ teleport.sh”的shell脚本,如下所示: if [ $1="1" ]; then shift mv "$@" ~/lab/Sun elif [ $1="2" ]; then shift mv "$@" ~/lab/Moon elif [ $1="3" ]; then shift mv "$@" ~/lab/Earth fi 当我执行时: sh teleport.sh 2 testfile 这testfile被移到了~/lab/Sun目录,这让我很困惑,因为我没有将1或1传递给该脚本。 怎么了
10 bash  shell  test 

5
为bash脚本创建别名
因此,我尝试进行实验并创建了一个aliasin .bashrc。但是,当我测试命令时,我得到: [rkahil@netmon3 ~]$ menu -bash: menu: command not found 这是.bashrc文件中的内容: # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions alias menu='./menuScript.sh' alias vi='vim' 有趣的是,当我创建别名时vi,它起作用了。但是菜单没有。我在UnixStackExchange上查找了以前的帖子,并尝试关注其他帖子,但无济于事。其他人有什么建议吗?
10 bash  alias 

1
在非选项参数之后使用getopts解析选项
我在文件中有一个bash脚本,如下所示nepleaks_upd.sh,我希望以此运行./nepleaks_upd.sh bootstrap --branch off。无法接受--branch,但是它的作用是./nepleaks_upd.sh bootstrap -b off。 usage() { echo "Usage: $0 [prepare | up | down] [-b <on/off>]" 1>&2; exit 1; } case "$1" in bootstrap) while getopts ":b:" o; do case "${o}" in b) b=${OPTARG} if [ ${b} == "off" ]; then echo "git clone https://github.com/iPrayag/dotfiles.git" ## logic …

3
在管道中调用我的函数时未设置环境变量
我具有以下递归函数来设置环境变量: function par_set { PAR=$1 VAL=$2 if [ "" != "$1" ] then export ${PAR}=${VAL} echo ${PAR}=${VAL} shift shift par_set $* fi } 如果我自己调用它,它将设置变量并回显到stdout: $ par_set FN WORKS FN=WORKS $ echo "FN = "$FN FN = WORKS 将stdout重定向到文件也可以: $ par_set REDIR WORKS > out cat out REDIR=WORKS $ echo "REDIR …

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.