Questions tagged «bash»

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

2
bash文件重定向到标准版本与Linux上的shell(`sh`)有何不同?
我编写了一个脚本,该脚本在运行时切换用户,并使用文件重定向到standard in来执行该脚本user-switch.sh。 #!/bin/bash whoami sudo su -l root whoami 并运行它bash给了我期望的行为 $ bash < user-switch.sh vagrant root 但是,如果我使用运行脚本,则会sh得到不同的输出 $ sh < user-switch.sh vagrant vagrant 为什么bash < user-switch.sh给出的输出不同于sh < user-switch.sh? 笔记: 发生在运行Debian Jessie的两个不同盒子上


5
如何在登录系统后自动将bash readline设置为vi模式?
我的团队负责数千台Linux / Unix计算机,因此,根帐户自然是在管理员之间“共享”的。我更喜欢vi模式,其他人更喜欢emacs模式。 如何在SSH登录到任何计算机时将bash的readline设置为vi模式,而又不强迫其他所有人也使用vi模式? 从本质上讲,它希望具有set -o vi登录后的效果,而不必每次都真正键入它,并且也不必强加给其他人(就像emacs模式对我来说很烦人,vi模式对他们来说很烦人)。 我知道,如果每个人都可以使用自己的sudo帐户执行特权命令,这将不是问题,但是由于我无法控制的情况,可悲的是这不是一个选择。
9 bash  emacs  vi  readline 

3
如何将find找到的文件作为参数传递?
首先要截断一些琐碎但不适用的答案:我既不能使用find+ xargs技巧,也不能使用其变体(如findwith -exec),因为每次调用我需要使用很少的此类表达式。最后,我会回到这一点。 现在来看一个更好的例子,让我们考虑: $ find -L some/dir -name \*.abc | sort some/dir/1.abc some/dir/2.abc some/dir/a space.abc 我如何将这些作为参数传递给program? 只是做不成功 $ ./program $(find -L some/dir -name \*.abc | sort) 失败,因为program获取以下参数: [0]: ./program [1]: some/dir/1.abc [2]: some/dir/2.abc [3]: some/dir/a [4]: space.abc 可以看出,带有空间的路径被分割,并program认为它是两个不同的参数。 报价直到生效 似乎像我这样的新手用户,遇到此类问题时,往往会随机添加引号,直到最终起作用为止-仅在这里似乎没有帮助… "$(…)" $ ./program "$(find -L some/dir -name \*.abc | …


4
shell脚本是否可以打印其引号,就像您在shell提示符下编写引号一样?
在shell脚本中,我的理解是"$@"扩展到脚本参数,并根据需要引用它们。例如,这会将脚本参数转发给gcc: gcc -fPIC "$@" 但是,当使用bash传递到stdin的语法时<<<,"@$"却无法正常运行。 #!/bin/bash cat <<< "$@" 调用脚本./test.sh foo "bar baz"给 foo bar baz 我希望 foo "bar baz" 有没有一种方法可以像在shell提示符下那样编写可打印其参数的shell脚本?例如:关于下一步要使用的命令的提示,包括提示中的脚本参数。

2
bash中单引号$'string'和双引号$“ string”有什么区别?
我试图使用执行新行,echo并尝试了以下两个命令: 第一条命令: echo $'Hello World\nThis is a new line' 响应: Hello World This is a new line 第二条命令: echo $"Hello World\nThis is a new line" 响应: Hello World\nThis is a new line 我的问题是什么是用包裹串之间的区别$' '与包裹VS字符串$" "中bash的echo?
9 bash  quoting  echo 

4
如果重定向失败,将不执行Bash程序
在bash中,我注意到,如果使用重定向的命令失败,则在此之前运行的任何程序都不会运行。 例如,此程序打开文件“ a”,并将50个字节写入文件“ a”。但是,运行此命令并将其重定向到权限不足的文件(〜root / log),文件大小“ a”不变。 $ ./write_file.py >> ~root/log -bash: /var/root/log: Permission denied cdal at Mac in ~/experimental/unix_write $ ls -lt total 16 -rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES 有人会认为程序会运行,捕获所有输出(但也会写入文件“ a”),然后无法将任何输出写入〜root / log。而是永远不会运行该程序。 为什么会这样,bash在执行程序之前如何选择执行的“检查”的顺序?是否还要执行其他检查? ps我试图确定在cron下运行的程序在重定向到“权限被拒绝”文件时是否真的运行了。

6
使用df和mount时仅显示物理磁盘
当我使用df或时mount,我对物理磁盘分区最感兴趣。如今,这些命令的输出已被临时和虚拟文件系统,cgroups和其他我不感兴趣的事物所淹没。 我在输出中的物理分区始终以“ /” 开头,因此我尝试为df和创建别名mount: alias df1="df | egrep '^/'" alias mount1="mount | egrep '^/'" 这样就可以了mount1(尽管它/以红色显示' '),但是因为df1我有时想将-h选项添加到df而不能这样做df1 -h。我不希望对每个可能要使用的选项组合都没有别名。我是否真的需要研究在bash中定义函数(我不想这样做)?有更好的解决方案df1吗?


3
如何使用内置的bash替换子shell或函数的输出
我正在尝试使用内置的bash子字符串替换子shell或另一个bash函数的输出。 以下命令在zsh中效果很好。但会导致bad substitutionbash错误: ${${PWD##*/}//trunk/latest} 要么 ${$(basename $PWD)//trunk/latest} 输出应该是最后一个文件夹$PWD,取而代之的是latest,当我的当前目录是trunk 所以/home/user/trunk应该成为latest 是否有bash等效项允许在不依赖变量或管道的情况下链接字符串版本?还是bash内置函数仅允许输入为字符串或纯变量?
9 bash 

5
查找多个文件中字符串的最后一次出现
我需要搜索多个日志文件(过去24小时内生成的所有文件,都保存在同一目录中)以查找字符串的最后一次出现。这是我写的命令: find . -mtime 1 | grep fileprefix | xargs grep 'search string' | tail -1 但这仅返回一个文件的最后一行。关于如何调整所有线条的任何建议?

1
Bash:有多少嵌套会话深?
假设我启动了一个bash外壳, 然后bash是该外壳中的 另一个bash会话,然后是该会话中的 另一个bash会话,然后是该会话中的另一个会话, (N次)等 要退出所有N个会话,我必须键入exitN次。 我如何找出在任何给定的bash会话中嵌套的深度? 理想情况下,我正在寻找一些类似于$STY屏幕会话的环境变量。

3
bash变量中的新行
我正在尝试在bash变量中存储多行,但是它似乎不起作用。 例如,如果我/bin每行列出一个文件并将其存储在中$LS,那么我$LS将以stdin的形式传递给wc,则该文件始终返回1: $ ls -1 /bin | wc -l 134 $ LS=$(ls -1 /bin); wc -l <<< $LS 1 如果尝试输出到屏幕,则会得到各种结果:将echo所有行打印在一行上,而printf仅打印第一行: #!/bin/bash LS=$(ls -1 /bin) echo $LS printf $LS 那么,bash变量可以包含多行吗?
9 bash  shell  quoting 

4
如何断言字符串具有换行符,如果有,请将其删除
我有一个字符串,这是我无法控制的某些操作的结果。当我使用打印此变量时echo,我得到: echo $myvar hello 但是,当我这样做 if [ $myvar = "hello" ]; then echo they are equal else echo they are not equal fi 我总是得到他们不平等。我怀疑这是因为newline角色。 该字符串的行为也很奇怪。当我做: newVAR="this is my var twice: "$myvar$myvar echo $newVAR 我得到: hellois my var twice: hello 如何检查这是否实际上是由于a引起的newline,如果是,将其删除?
9 bash  string 

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.