Articles of unix

/ usr / bin / env关于shebang行的问题

问题 : 如果你把一个shell脚本粘贴到shebang行,内核是做什么的? 内核如何知道启动哪个解释器? 说明 : 我最近想写一个/ usr / bin / env的包装器,因为我的CGI环境不允许我设置PATHvariables,除了全局的(当然很糟糕!)。 所以我想,“好吧,让我们设置PREPENDPATH并设置围绕env的包装中的PATH ”。 由此产生的脚本(这里称为env.1 )看起来像这样: #!/bin/bash /usr/bin/env PATH=$PREPENDPATH:$PATH $* 这看起来应该工作。 在设置PREPENDPATH之后,我检查了它们是如何反应的: $ which /usr/bin/env python /usr/bin/env /usr/bin/python $ which /usr/bin/env.1 python /usr/bin/env /home/pi/prepend/bin/python 看起来绝对完美 ! 到现在为止还挺好。 但看看“Hello World!”会发生什么? # Shebang is #!/usr/bin/env python $ test-env.py Hello World! # Shebang is #!/usr/bin/env.1 python $ test-env.1.py […]

参数列表太长时如何正确使用“xargs”

有人可以给我一个在下面的操作使用xargs的例子吗? tar c $dir/temp/*.parse\ | lzma -9 > $dir/backup/$(date '+%Y-%m-%d')-archive.tar.lzma 我从bash得到错误“ / bin / tar:参数列表太长 ” 特别是我试图对大约4500个文件进行LZMA压缩; 所以这并不奇怪。 我只是不知道如何修改上面的使用xargs并摆脱错误! 谢谢。

Python的select()行为很奇怪

我在理解select.select的行为时遇到了一些麻烦。 请考虑下面的Python程序: def str_to_hex(s): def dig(n): if n > 9: return chr(65-10+n) else: return chr(48+n) r = '' while len(s) > 0: c = s[0] s = s[1:] a = ord(c) / 16 b = ord(c) % 16 r = r + dig(a) + dig(b) return r while True: ans,_,_ = select.select([sys.stdin],[],[]) print ans s […]

在SED / AWK / Perl中单行添加条件在FASTA文件中join换行符

我有一个看起来像这样的数据 > sq1 foofoofoobar foofoofoo > sq2 quxquxquxbar quxquxquxbar quxx > sq3 paxpaxpax pax 我想要做的就是把它们合并成一行: > sq1 foofoofoobarfoofoofoo > sq2 quxquxquxbarquxquxquxbarquxx > sq3 paxpaxpaxpax 我试过这个代码,但失败。 sed -e 'te' -e 'H;$!d;:e' -e 'x;/^$/d;s/\n//g' 什么是正确的方法来做到这一点?

使用getopts(bash)的多个选项参数

我想在bash中使用getopts来处理命令行参数。 其中一个要求是处理任意数量的选项参数(不使用引号)。 第一个例子(只抓取第一个参数) madcap:~/projects$ ./getoptz.sh -sabc -s was triggered Argument: a 第二个例子(我希望它的行为是这样的,但不需要引用“ madcap:~/projects$ ./getoptz.sh -s "abc" -s was triggered Argument: abc 有没有办法做到这一点? 这里是我现在的代码: #!/bin/bash while getopts ":s:" opt; do case $opt in s) echo "-s was triggered" >&2 args="$OPTARG" echo "Argument: $args" ;; \?) echo "Invalid option: -$OPTARG" >&2 ;; 🙂 echo "Option -$OPTARG requires […]

ICE默认IOerror handling程序执行exit(),pid = 11281,errno = 4

我们的一个PyQt应用程序抛出一个关于ICEAuthority的错误,如下所示, ICE默认IOerror handling程序执行exit(),pid = 11281,errno = 4 在看踪迹,我们看到以下 – write(25, "\1\0\3\200\3\0\0\0\3\0\0\0\t\0\0\0\10\0\0\0\1\0\0\0\377rtStyle", 32) = 32 read(25, 0x16a67f0, 8) = ? ERESTARTSYS (To be restarted) — SIGCHLD (Child exited) @ 0 (0) — write(6, "\0", 1) = 1 rt_sigreturn(0x2) = -1 EINTR (Interrupted system call) write(2, "ICE default IO error handler doi"…, 69) = 69 这看起来像ICEAuthority文件读取操作无法重新启动后,处理我们从PyQt应用程序中产生的进程之一的SIGCHLD。 在Google上,有许多关于ICEAuthority文件失败的报告,人们build议重新启动系统,删除.ICEAuthority文件或取消设置SESSION_MANAGER。 […]

将string拆分成bash中的数组

我正在寻找一种方法来在bash中分隔string中的string,并将这些部分放在一个数组中。 简单案例: #!/bin/bash b="aaaaa/bbbbb/ddd/ffffff" echo "simple string: $b" IFS='/' b_split=($b) echo ; echo "split" for i in ${b_split[@]} do echo "—— new part ——" echo "$i" done 给出输出 simple string: aaaaa/bbbbb/ddd/ffffff split —— new part —— aaaaa —— new part —— bbbbb —— new part —— ddd —— new part —— ffffff 更复杂的情况: #!/bin/bash c=$(echo […]

close()在Linux上调用fsync()吗?

当我们调用close(<fd>) ,它是否自动执行fsync()以同步到物理介质?

我如何修改我的用户PROFILE文件来追加我创build的脚本文件夹到我的PATHvariables的末尾?

我如何修改我的用户PROFILE文件来追加我创build的脚本文件夹到我的PATHvariables的末尾? 我不完全确定这是什么意思。 任何人都可以解释 谢谢 :)

a.out被ELF文件格式取代?

我有几个问题: 为什么a.out被ELF取代? a.out格式中导致ELF文件格式升级的主要缺陷是什么? 较早的核心转储基于a.out,但是现在它们基于ELF。 ELF提供的各种优势是什么?