小编Nei*_*ill的帖子

新贵和 bash 函数名称包含“-”

我继承了一些 bash 脚本,其中作者在函数名称中使用了“-”而不是更普通的“_”,例如:

function a-b {
...
}
Run Code Online (Sandbox Code Playgroud)

在 bash 中丑陋但合法。问题是我在一个暴发户脚本中找到了这个并得到了

x.sh:第 5 行:`a-b'​​:不是有效标识符

花了一段时间才意识到这是名称而不是函数内容。无论如何,在这种情况下重命名不是一个简单的选择,据我所知,暴发户使用/bin/shnot/bin/bash解析?运行它的脚本。因此我猜这个问题。

除了重命名之外,还有其他解决方法的想法吗?

如果不出意外,至少我希望这个问题能警告其他人奇怪的 bash 编码风格的危险,以及它们有时如何反咬你。

shell bash upstart

6
推荐指数
1
解决办法
983
查看次数

如何完全分离一个进程

我想生成一个进程并在顶层运行它,这样当 shell 退出时,进程继续运行。

我错误地认为 nohup 会这样做,但是当我退出 shell(shell 是一个 lxc 容器,我 ssh 进入该容器)并重新进入时,该过程消失了。

似乎(查看 pstree)该进程仍在调用 shell 下,即使使用 nohup 或 disown。

我尝试了一些选项,setsid 似乎有效 - 但是我在这里用 nohup 做错了吗?

$ cat myproc
sleep 1234

$ myproc &
$ pstree -a | grep -B 3 "1234" | grep -v grep
  |-screen 
  |   |-bash -ls
  |   |   |-bash -ls
  |   |   |   `-sleep 1234


$ nohup myproc &
$ pstree 
  |-screen 
  |   |-bash -ls
  |   |   |-pstree -a
  |   |   `-sh ./myproc
  |   |       `-sleep 1234 …
Run Code Online (Sandbox Code Playgroud)

bash process nohup disown

5
推荐指数
0
解决办法
4459
查看次数

高效的跨操作系统文件大小shell函数

我正在寻找一种更简单的方法来进行跨操作系统的 unix 文件大小检查。我可以使用 wc -c 但我担心大文件的性能可能会很差(我假设它只计算字符并且不做统计?)

以下适用于 linux 和 macos(可能是 bsd)。有没有更简单的表现良好的方法?

function filesize
{
    local file=$1
    size=`stat -c %s $file 2>/dev/null` # linux
    if [ $? -eq 0 ]; then
        echo $size
        return 0
    fi

    eval $(stat -s $file) # macos
    if [ $? -eq 0 ]; then
        echo $st_size
        return 0
    fi

    echo 0
    return -1
}
Run Code Online (Sandbox Code Playgroud)

bash shell-script files

4
推荐指数
1
解决办法
648
查看次数

标签 统计

bash ×3

disown ×1

files ×1

nohup ×1

process ×1

shell ×1

shell-script ×1

upstart ×1