Questions tagged «bash»

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


3
删除文件,但仅当它是符号链接时
理想情况下,我想要这样的命令 rm --only-if-symlink link-to-file 因为我烧掉自己太多次了,所以不小心删除了文件而不是指向文件的符号链接。当涉及到sudo时,这尤其糟糕。现在,我当然要做一个a ls -al,以确保它确实是一个符号链接,但是这样很容易受到操作员错误(类似文件,错字等)和竞争条件(如果有人出于某种原因要我删除文件)的攻击。有什么方法可以检查文件是否为符号链接,并且仅在一个命令中才将其删除?
11 bash  command-line  rm 

1
切勿将`-a`或`-o`运算符与`[`
斯特凡·查泽拉斯写道: 一些规则,例如 总是引用变量 永远不要使用-aor -o运算符(使用多个[命令以及&&and和||shell运算符) [使用POSIX shell 使其可靠。 为什么“从不使用-aor -o运算符”? 我该如何“使用几个[命令以及&&and和||shell运算符”?
11 bash  shell  test 

3
bash脚本在命令中的临时值
像下面的命令一样, if true; then IFS=":" read a b c d e f <<< "$test" 书中说,IFS ":"在主命令(read a b c d e f <<< "$value")之前使用值分配命令()时,其值暂时对主命令有效。因此,该read命令使用delimiter :。 但是,就像这个命令 if true; then HOME="hello" echo "$HOME" 回声不是你好。以上命令的真正含义是什么?

2
子外壳与子外壳是否相同
有两个名称:subshel​​l和child-shell。 是的,子进程将通过以下任何一种方式启动: sh -c 'echo "Hello"' ( echo "hello" ) echo "$(echo "hello") echo "hello" | cat 是否都相同并具有相同的名称?所有共享相同的属性吗? POSIX 具有以下定义: Shell执行环境由...组成。 但是上面链接的最后一段有: 子外壳程序环境应作为外壳程序环境的副本创建,但不忽略的信号陷阱应设置为默认操作。 特别是: 命令替换,用括号分组的命令以及异步列表应在子shell环境中执行。另外,多命令管道中的每个命令都在子shell环境中。.... 其中sh -c 'echo "Hello"'不包含,也应该称为subshel​​l吗?

2
无法在脚本中使用!$?
只是想知道为什么这不起作用 #!/bin/bash ls /bin ls !$ 我预计会运行ls /bin两次,但是第二次会出现错误,!$因为没有解释 我错过了什么,还是!$只在命令行工作? 我在man bash(Mac上)找不到相关的部分
11 bash 

2
&6和/ dev / fd / 6有什么区别?
要读取文件描述符6,我可以使用<&6或</dev/fd/6(aka /proc/self/fd/6)。通常两者都可以很好地工作。但是,如果该文件描述符恰好是套接字,则会发生奇怪的事情。例如: $ bash -c 'ls -l /dev/fd/6;cat /dev/fd/6' 6</dev/tcp/localhost/12345 lrwx------ 1 michas michas 64 Jan 10 19:50 /dev/fd/6 -> socket:[315010] cat: /dev/fd/6: No such device or address 这里ls显示描述符确实存在。但是用这种方式不可能访问数据。如果我cat <&6改用其他方法,一切都会再次正常。 两种访问文件描述符的方式有什么区别? 如果数字在变量中给出,是否有访问描述符的好方法?(</dev/fd/$fd可以,但<&$fd不能。) (以上情况在Linux上可以观察到,但在OpenBSD上则不能观察到。-似乎文件描述符在那里是常规字符设备。)

3
如何扩展bash别名
如何创建一个别名,该别名实际上在Bash中扩展了另一个同名别名? 为什么: 我以前也GREP_OPTIONS设定.bashrc到这样的事情: GREP_OPTIONS="-I --exclude=\*~" 我也有一个脚本(让我们说setup-java.sh),在进行某些Java项目之前,我会先调用它。它包含以下行: GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=classes" 如果我也使用Sass,那么我将调用setup-sass.sh包含以下内容的行: GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=\*/.sass-cache" 但是GREP_OPTIONS不推荐使用,显然标准解决方案是创建别名或一些脚本...
11 bash  grep  alias 

1
Bash别名,命令中包含空格
我正在尝试创建一个bash别名,别名本身中有一个空格。 这个想法是别名(即con)代表sudo openvpn --config /path/to/my/openvpn/configs/。con使用别名时,这将导致可读命令。 即: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf` 我知道我不能这样声明别名: con ="sudo openvpn --config /path/to/my/openvpn/configs/"。bash函数在这种情况下会起作用吗?我从未听说过,但是在研究此小问题的解决方案时。

1
为什么回声两次匹配某些文件?
$ touch file{1..12} $ echo *e{1..12} file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12 $ echo *{1..12} file1 file11 file12 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11 file12 我不明白为什么会这样。请有人可以解释吗?

5
测试文件名称是否在日期之后修改
我有一个文件名为YYYYMMDD的文件,例如 file-name-20151002.txt 我想确定此文件在2015-10-02之后是否已修改。 笔记: 我可以通过查看的输出来完成此操作ls,但是我知道解析输出ls是一个坏主意。 我不需要查找在特定日期之后标出日期的所有文件,只需要一次测试一个特定文件。 创建文件后,我不担心文件在同一日期被修改。也就是说,我只想知道20151002名称中带有此文件的是否在2015年10月3日或更晚时间被修改。 我使用的是MacOs 10.9.5。
11 bash  files  osx  timestamps 

5
Bash-在脚本中更改主机名后,PS1没有使用正确的主机名更新
这是我从stackoverflow获得的帖子的副本;我意识到我应该在这里问这个... 我想运行一个更改主机名的脚本,并使用正确的主机名立即更新我的bash提示符(PS1变量)。我如何做到这一点? 我跑这个 #!/bin/bash # Usage: ./changehost <newhostname> #Do two sed's to edit the files for persistent hostname change sed -i s/$(hostname)/$1/g "/etc/hosts" sed -i s/$(hostname)/$1/g "/etc/sysconfig/network" #run the hostname command with new hostname to update it hostname $1 在这样的终端中得到这个 [user@host dir]# ./changehost newhostname [user@host dir]# 但是我想要的是 [user@host dir]# ./changehost …
11 bash  shell 

2
为什么bash链接到ncurses?
我想我以前已经注意到了这一点,但从未想过。现在我很好奇。 > ldd /bin/bash linux-vdso.so.1 => (0x00007fff2f781000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f0fdd9a9000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f0fdd7a5000) libc.so.6 => /lib64/libc.so.6 (0x00007f0fdd3e6000) /lib64/ld-linux-x86-64.so.2 (0x00007f0fddbf6000) Libtinfo是ncurses的一部分。这是一个fedora系统,但在ubuntu上是相同的,我注意到在raspbian(debian变体)上,它也链接到libncurses本身。 这是什么原因呢?我认为bash所做的一切都可以通过libreadline完成(奇怪的是,它没有链接到)。这仅仅是替代吗?
11 bash  readline  ncurses 



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.