Articles of unix

处理退出和对线程的影响

在维护中,我看到项目代码(在Linux上的c/c++中)调用libc exit函数,以防某些不可恢复的错误。 但是,此进程终止调用跨多个线程使用(每个线程面临不可恢复的情况时)。 现在 – 是否可以从主线程以外的线程调用该进程,而没有任何副作用。 每当调用exit (无论是在主线程还是在其他线程中),都可以保证线程的正常退出。 我知道标准(手册页)对此没有提到,最好的办法是,启动所有线程的正常终止并使用通知机制,必须通知main线程进行正常的终止。 但是,由于它是一个正在维护中的项目,因此在更改之前要检查当前的行为是否正确。 我面对的问题是,我可以看到随机崩溃,其中一个线程是在exit调用执行的正常进程下。

获取前n个文件的名称,而不用在linux中列出所有的文件

我知道只要input: ls | head -n就可以列出目录中的前n个文件 ls | head -n其中n是要列出的文件的数量。 然而,问题是我试图运行这个目录充满了成千上万的文件导致这个行动是非常缓慢(需要几分钟),而我想要的只是第一个文件的名称。 有什么办法达到预期的行为? 如何?

Shell脚本 – SFTP – >如果复制,删除?

Iam试图通过sftp复制与shellcript的文本文件。 我已经写了一个脚本来完成这项工作。 #!/bin/bash HOST='Servername' USER='Username' sftp -b – ${USER}@${HOST} << EOFFTP get /files/*.txt /tmp/ftpfiles/ rm /files/*.txt quit EOFFTP 在删除FTP上的所有文本文件之前,我想确保,我复制了所有文件,没有错误。 我怎样才能做到这一点? 我使用SSH密钥login。 任务是:一遍又一遍地复制所有的文本文件,但要确保它不是一样的…(这就是为什么我使用删除…) 也许我可以将它们移动到FTP上? 像复制,然后移动到/文件/复制?

如果两台机器中的文件都是错误的,如何退出shell脚本?

我在machineA上运行我的shell脚本,它将machineB和machineC的文件复制到machineA 。 如果该文件不在machineB ,那么它肯定应该在machineC中。 所以我会尝试从machineB首先复制,如果它不在machineB那么我将去machineC复制相同的文件。 下面是我用来复制文件的shell脚本, PRIMARY_PARTITION是一个包含所有文件编号的数组 – for el in "${PRIMARY_PARTITION[@]}" do scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineB:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. || scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineC:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. done 现在的问题是 – 可能有一些情况下,在这两个机器中没有文件 – machineB和machineC然后我想退出shell脚本非零状态和适当的消息与哪个文件丢失 – 所以我喜欢这个,我在最后加了一个pipe道声明,但不知怎的,这个消息没有被打印出来。 而且我非常确定那些试图复制的文件不在这两个机器的文件夹中 – scp -o ControlMaster=auto -o 'ControlPath=~/.ssh/control-%r@%h:%p' -o ControlPersist=900 david@machineB:/te/data/te_snapshot/20140411/t1_weekly_1680_"$el"_200003_5.data /data01/primary/. || scp -o ControlMaster=auto […]

如何使用batch file执行保存在putty文本文件中的Unix命令

想要使用putty从batch file执行保存在文本文件中的Unix命令。 我用这行创build了一个.bat文件: start C:\Users\putty.exe -load "server" -l userID -pw Password -m commands.txt 和commands.txt文件包含Unix命令 ls 我通过puttylogin了我的帐户,但是在文本中添加的命令ls未被执行 假设没有必要使用plink.exe,因为我可以用putty.exe本身login

UNIX通过url列表循环并使用wget进行保存

我试图下载很多文件,并可以使用unix很长的一段时间,但我怎样才能使用循环function呢? 我有许多表像CA30和CA1-3下载。 我可以把表名称list("CA30", "CA1-3")并有循环通过列表? #!/bin/bash # get the CA30 files and put into folder for CA30 sudo wget -PO "https://www.bea.gov/regional/zip/CA30.zip" sudo mkdir -p in/CA30 sudo unzip O/CA30.zip -d in/CA30 # get the CA30 files and put into folder for CA1-3 sudo wget -PO "https://www.bea.gov/regional/zip/CA1-3.zip" sudo mkdir -p in/CA1-3 sudo unzip O/CA1-3.zip -d in/CA1-3

grep -v'。*'不起作用

正如所料,这个完全无用的命令不包括pipe理grep的所有内容: $ man man | grep -v '.*' $ 我如何得到输出pipe道bind -p这个? $ bind -p | grep -v '.*' "?": self-insert "?": self-insert "?": self-insert "?": self-insert "?": self-insert (227 more…) 退出码是0,没有写入stderr。

在Python中编辑plist

我有一个plist文件如下,我想从一个python脚本编辑。 我有一个安装程序python脚本,我想在设置完成后将'InitSetupComplete'值更改为string'YES'。 我已经尝试了一些我已经发现堆栈溢出的python片段,但plist仍然未经编辑。 我很可能在我的代码中犯了一个错误。 任何想法什么是错的? 我是否需要chmod plist以便脚本可以编辑它? boot_info.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>InitSetupComplete</key> <string>NO</string> </dict> </plist> setup.py import sys import plistlib //Do Setup Here… //Change Setup Value to YES pl = plistlib.readPlist("boot_info.plist") del pl["InitSetupComplete"] pl["InitSetupComplete"] = { 'InitSetupComplete': 'YES' } sys.exit()

Bash:在文件B中search文件A的内容并在文件C中打印文件A的行

我有两个文件A和B文件A: 976464 792992 文件B TimeStamp,Record1,976464,8383,ABCD 我想search文件A和文件B中的每个logging并打印匹配的logging。 打印的logging必须来自文件B 例如,上面应该打印: TimeStamp,Record1,976464,8383,ABCD 我想在shell脚本中实现这一点。 文件大小是巨大的。

如何检查在csh中的错误代码的状态?

这不是Perl的问题,这是一个csh的问题。 Linux RHEL 5.5.56上的Perl 5.8.8。 我有一个使用'exit 3'的testingPerl程序 设置退出状态。 Perl程序是从我称之为“test”的csh脚本运行的。 Perl程序: #/usr/bin/perl # July 11, 2014 # Test exit code with csh $status variable my($i); $i=3; print "$0 Exit with error code $i\n"; exit $i; 'testing'调用Perl程序的csh脚本: #/bin/csh # July 10, 2014, perl tstatus.pl echo "Status=$status" if ($status > 0) then echo "ERROR in status: $status" endif […]