Questions tagged «bash»

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

3
终端,提示更改为“ -Bash-4.2”,颜色丢失
通常我的终端提示是 username place$ 现在只显示 bash-4.2$ 并且所有的颜色设置都丢失了(在终端配置文件中,我使用相同的配色方案,但是只是不显示颜色) 我不知道会发生什么(我也不知道如何搜索)。 它什么都没有改变,我正在使用Eclipse和Maven,打开了一个新终端,并且新终端没有颜色。 注意:我没有〜/ .bashrc文件,但是我有〜/ .bash_profile。


2
杀死可执行文件时如何自动删除目录
通常,我们运行一个需要写入/读取一些临时文件的可执行文件。我们通常创建一个临时目录,在其中运行可执行文件,并在脚本完成后删除该目录。 即使可执行文件被杀死,我也想删除目录。我试图将其包装在: #!/bin/bash dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir /usr/local/bin/my_binary 当my_binary模具,最后一道工序,内核会删除目录,因为剧本是最后一道工序是持有inode; 但我无法在已删除目录中创建任何文件。 #!/bin/bash dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir touch file.txt 输出 touch: file.txt: No such file or directory 我能想到的最好的办法是在进程终止时删除temp目录,捕获最常见的信号,然后使用cron运行清理进程: #!/bin/bash dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99 trap 'rm …
9 bash  files 


3
如何判断终端会话是否在屏幕上运行
在运行bash脚本时,我想知道它是否在内运行screen。这可能吗? 我想要这样做,以便.bashrc可以根据会话是否在屏幕内启动来设置命令提示符的颜色。 我的回答一经发现,便找到了此链接:如何知道我是否在屏幕上?

4
匿名传递代码块。功能
是否可以将命令块视为匿名函数? function wrap_this { run_something # Decide to run block or maybe not. run_something else } wrap_this { do_something do_somthing else } # Do something else wrap_this { do_something_else_else do_something_else_else_else } (我意识到您为每个块创建了一个函数或文件,但是我发现在某些情况下此选项更清晰,更易于阅读。) while用do/done和function做{ multiple lines }。我知道BASH没有匿名函数,但是是否可以将多个命令传递给另一个函数,就像定义一个函数时可以做到的那样while?
9 bash  function 

1
readline单词分隔符是什么?
当我删除Bash中的“单词”时,它将停在某些字符,例如_和/。例如,如果我输入 /foo/bar 并激活backward-kill-word(通常映射到Alt- Backspace和/或Ctrl- w),其余文本为 /foo/ 。这确实不对应$COMP_WORDBREAKS或readline的rl_completer_word_break_characters。如何检测(最好是在正在运行的系统中,而不是代码中的默认值,因为它们可能会被覆盖),这是什么字符来确定断字?
9 bash  readline 

3
跨壳反斜杠的处理
如何echo和printf在治疗反斜杠zsh,bash和其他贝壳? 在zsh下,我得到以下行为: $ echo "foo\bar\baz" foaaz $ echo "foo\\bar\\baz" foaaz $ echo 'foo\bar\baz' foaaz $ echo 'foo\\bar\\baz' foo\bar\baz 在bash下,情况似乎更加一致: bash$ echo "foo\bar\baz" foo\bar\baz bash$ echo 'foo\bar\baz' foo\bar\baz bash$ 但更具体而言:如何传递包含反斜杠的字符串,例如\\foo\bar\something: echo printf print 并获得完全相同的字符串?(在zsh和中bash)? 这是另一个在zsh中使用函数的实验: function foo { echo -E '$1' } $ foo \\here\is\some\path $1 我怎样才能只打印它\\here\is\some\path? 更新(注意:这已在Stephane的评论中得到回答) 我在zsh 5.0.2中尝试了以下方法: function …
9 bash  shell  zsh  quoting 

2
如何在Bash中利用XDG目录和路径?
我不知道如何访问不仅在定义的变量~/.config/user-dirs.dirs有xdg-user-dir,例如"$(xdg-user-dir VIDEOS)",而且下面的标准变量: XDG_CACHE_HOME:-$HOME/.cache XDG_CONFIG_HOME:-$HOME/.config XDG_DATA_HOME:-$HOME/.local/share XDG_RUNTIME_DIR:-"/run/user/$USER" XDG_CONFIG_DIRS:-/etc/xdg XDG_DATA_DIRS:-/usr/local/share:/usr/share 为此,我在~/.bash_login文件中执行以下操作: # Define standard directories. declare -gx XDG_CACHE_HOME=~/.cache declare -gx XDG_CONFIG_HOME=~/.config declare -gx XDG_DATA_HOME=~/.local/share declare -gx XDG_RUNTIME_DIR="/run/user/$USER" declare -gx XDG_CONFIG_DIRS="$(IFS=: path /etc/xdg)" declare -gx XDG_DATA_DIRS="$(IFS=: path /usr/local/share:/usr/share)" # Source supplementary directories to export or overwrite existing standard ones. declare a="$XDG_CONFIG_HOME/user-dirs.dirs" if [[ …

2
Kis范围在`ls -l`中的不同颜色
有什么明智的方法可以从中突出显示文件大小右侧的第4列,第5列和第6列ls -l?我的意图是使读取文件大小变得容易,无论是字节,KiB还是MiB。我确实知道该-h标志,但是我发现必须在末尾解释字母比仅查看并查看数字的长度(幅度)更为麻烦。这就是赛车使用模拟转盘而不是数字转盘的相同原因。 我的目标外壳是Bash。谢谢。 编辑:我想突出显示大小列的成千上万个位置。就像这样:123 456 789
9 bash  ls 

2
如何处理选项终止—在getopts中
我使用getopts将bash脚本中的参数解析为 while getopts ":hd:" opt; do case $opt in d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;; h ) helptext graceful_exit ;; * ) usage clean_up exit 1 esac done exeparams="$*" exeparams将保留任何未解析的选项/参数。由于我想使用exeparams来保存要在脚本内执行的命令的选项(该选项可以与脚本自己的选项重叠),因此我想使用-结束传递给脚本的选项。如果我通过 myscript -d myscriptparam -- -d internalparam exeparams 将举行 -- -d internalparam 我现在想删除--将这些参数传递给内部命令的引线。有没有一种优雅的方法可以做到这一点,或者我可以--从getopts中获得仅保留其余部分的字符串?
9 bash  getopts 

3
通过换行符拆分命令输出?
我有一个返回多行的命令。为了进一步处理,我需要处理这些行中的每一行。 我当前的代码通过修改IFS(内部字段分隔符)来工作: ROWS=$(some command returning multiple lines) O=$IFS #save original IFS IFS=$(echo -en "\n\b") # set IFS to linebreak for ROW in ${ROWS[@]} do echo "$ROW" done IFS=$O #restore old IFS 我想知道,是否有更好的方法来访问多行输出中的单行,而无需修改IFS?尤其是我的脚本的可读性由于修改IFS而变差。 更新:我很难获得答案,例如choroba的答案: while IFS= read -r line ; do let var+=line #line 42 done << $(sqlite3 -list -nullvalue NULL …

2
搜索命令历史
我通过按以下方式搜索终端命令历史Ctrlr: This is an old command This is an | less -S older command 我按Ctrlr,然后键入“这是一个”,并且出现旧命令,但不是旧命令。如何搜索所有“这是”命令?是否可以将所有类似的命令传递给grep或其他东西? 如果是我set -o vi该如何撤消呢?


4
在bash(或其他)中设置变量环境变量
我希望脚本读取包含要设置的环境变量的键/值对的文件,然后进行设置。 到目前为止,我有这个: #!/bin/bash cat $1 | while read kv do key=${kv%=*} val=`echo ${kv#*=} | sed 's/^"\|"$//g'` export $key="$val" done 我想读取这样的文件: XAUTHLOCALHOSTNAME="localhost" DISPLAY=":0" XAUTHORITY="/tmp/some-XAuthority" 我只需要在脚本的作用域内将这些变量放在作用域中,因此无需解决在脚本中为父作用域设置变量的问题。 通过测试,我认为我的问题出在export $key="$val"哪里,因此我只需要替换该行即可。

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.