Questions tagged «portability»

3
tar cvf或tar -cvf?
我已经学会了使用不带'-'的tar作为选项,例如,tar cvfz dir.tar.gz Directory/但是我最近遇到了稍微不同的tar -czvf语法(在这种情况下,我认为'f'必须是最后一个选项)。 两者都可以在linux和Mac OS上运行。是否有推荐的语法,带有不带-的ou,可以更方便地在unix风格中使用?

7
尾-f,但带有行号
我正在尝试查看在任意时间范围内在远程服务器上foo bar出现了多少次/var/log/foo.log,但是到目前为止我没有尝试过。 我已经有了一个计时器脚本,可以用来跟踪自开始拖尾以来已经有多长时间了/var/log/foo.log,现在我想要一种方法来判断foo bar拖尾输出中出现了多少次。 我搜索了google,但在搜索结果的前10页中没有发现任何相关信息。 这是我尝试过的令人沮丧的结果: ## works on local machine, but doesn't work as expected on remote tail -f /var/log/foo.log | grep foo\ bar | sed '=' ## works on local, but not remote tail -f /var/log/foo.log | grep foo\ bar | cat -n - ## works on local, …

6
生成随机密码;为什么不便携?
我想生成一个随机密码,并且这样做: </dev/urandom tr -dc [:print:] | head -c 64 在运行Ubuntu的笔记本电脑上,这只会按预期生成可打印的字符。但是,当我进入学校的运行Red Hat Enterprise Linux的服务器并在其中运行服务器时,3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K会得到诸如之类的输出,但根本无法执行。这里可能出什么问题了?

2
文件描述符链接的可移植性
我一直想知道这一点,但从来没有花时间找出来,所以我现在就这样做-是使用便携式怎么这里显示的任一/proc/$$/fd/$N或/dev/fd/$N?我了解POSIX担保 /dev/null, /dev/tty, and /dev/console (尽管我是在阅读有关此答案的评论后的第二天才发现的),但是其他这些担保呢? 据我所知,它们很常见,但是我不能指望它们在哪些系统中找到?为什么不?找到一个比另一个更有可能吗?他们会总是表现出类似的属性吗? 我倾向于以各种方式广泛地使用这些设备,并且我想知道是否有机会尝试一下。 另外,上述问题应该被理解为仅是我想,我想知道,但是,因为我显然要问的第一个地方,我可能不知道最好在这方面,他们不应该被认为是严格要求答案。请告诉我,如果可以的话。

3
使用^作为外壳元字符
我今天写了一个小脚本,其中包含 grep -q ^local0 /etc/syslog.conf 在审查过程中,一位同事建议^local0引用该词,因为^在Bourne外壳中意为“烟斗”。对此声明感到惊讶,我试图查找提及此内容的任何参考。我在互联网上没有发现任何暗示这是问题的信息。 但是,事实证明,bsh在AIX 7上的实现(声称是Bourne shell)实际上具有以下行为: > bsh $ ls ^ wc 23 23 183 $ ls | wc 23 23 183 我尝试过的其他“ Bourne shell”实现^都没有这种行为的方式(也就是说,根本不被认为是shell元字符)。我sh在CentOS(实际上是bash)和shFreeBSD(不是bash)上进行了尝试。我没有很多其他系统可以尝试。 这是预期的行为吗?哪些壳被认为^是管道元字符?

4
符合checkbashisms的方法来确定当前shell
在我的文章中.profile,我使用以下代码来确保仅在登录shell实际上是Bash时才获得与Bash相关的别名和函数: # If the current (login) shell is Bash, then if [ "${BASH_VERSION:-}" ]; then # source ~/.bashrc if it exists. if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 我目前正在将我的shell配置文件,脚本和函数置于版本控制之下。我也最近开始去除shell脚本不从击的特定功能中受益,如休闲bash化,更换的过程中function funcname()有funcname()。 对于我的shell文件存储库,我已经配置了一个预提交钩子,该存储库中的每个文件都运行checkbashismsDebian的devscripts包中的实用程序,sh以确保我不会无意中引入Bash特定的语法。但是,这给我带来了一个错误.profile: possible bashism in .profile line 51 ($BASH_SOMETHING): if [ "${BASH_VERSION:-}" ]; then 我想知道是否有一种方法可以检查正在运行的shell,而不会触发checkbashisms。 我检查了POSIX列出的与外壳相关的变量的列表,希望它们中的一个可以用来显示当前的外壳。我还查看了在交互式Dash shell中设置的变量,但是,再次找不到合适的候选对象。 目前,我已经排除.profile因被处理checkbashisms; …

2
什么时候编写可移植脚本很重要?
我写的大多数代码都在PHP中。我最近开始学习Shell脚本。我遇到的大多数资源和教程都是针对Bash的。有些警告关于洗礼,有些则没有。我在这里和Stack Overflow上已经读了很多东西。 每当答案使用Bashisms时,不可避免地会有人评论说: 您不应该使用<在此处插入bashism>。它不是便携式的。 即使将问题标记为,也会发生这种情况bash。对我来说,这就像告诉一个PHP程序员,他们不应该使用PHP 5中的新代码,因为它不能与PHP 4一起使用。或者告诉某人,他们不应该为Mac写一些东西,因为它不能被使用。在Windows上。 当我用PHP编写时,我选择了最低要求,并编写了向前兼容的代码。我不担心使其向后兼容。 如果我使用#!/bin/bashshebang,为什么不使用bashisms?我开始得到的印象是有些人就是喜欢bash的 bash化(双关语意)只是为了它的缘故。 人们经常使用bash并且shell可以互换使用-可能是由于bash是许多系统上的默认shell。因此,我可以理解添加注释以警告该代码使用了bashisms,但我不明白使用它们的含义是错误的。 显然,如果我编写的脚本严格仅供个人使用,则可以用我想要的任何语言编写。但我想认为我编写的某些代码可能对其他人有用。 发布前,我尝试过寻找问题的答案。我发现了很多有关如何测试可移植性的信息,但是找不到什么时候进行此操作很重要。 那么,什么时候编写可移植脚本很重要? 例如, 哪种类型的脚本应尽可能地可移植? 没有安装Bash的系统有多普遍? 如果系统已安装Bash,它还会具有GNU版本的find和其他实用程序吗?


8
二进制文件可以跨不同的CPU架构移植吗?
我的目标是能够为嵌入式Linux开发。我有使用ARM的裸机嵌入式系统的经验。 对于针对不同的CPU目标进行开发,我有一些一般性问题。我的问题如下: 如果我有一个编译为在x86目标linux OS版本xyz上运行的应用程序,是否可以在另一个系统ARM目标linux OS版本xyz上运行相同的编译二进制文件? 如果上述情况不成立,唯一的方法是使用相关工具链“例如arm-linux-gnueabi”来获取应用程序源代码以进行重建/重新编译? 同样,如果我有一个可加载的内核模块(设备驱动程序)可以在“ x86目标,Linux OS版本xyz ”上工作,我是否可以在另一个系统“ ARM目标,Linux OS版本xyz ” 上加载/使用相同的已编译.ko。? 如果上述情况不成立,唯一的方法是使用相关工具链“例如arm-linux-gnueabi”来获取驱动程序源代码进行重建/重新编译?

2
OSX上的统计输出
我想使用stat命令来获取文件信息。我这样做: Josephs-MacBook-Pro:Desktop Joseph$ echo 'hello' > info.txt Josephs-MacBook-Pro:Desktop Joseph$ stat info.txt 16777220 21195549 -rw-r--r-- 1 Joseph staff 0 6 "Dec 21 20:45:31 2014" "Dec 21 20:45:30 2014" "Dec 21 20:45:30 2014" "Dec 21 20:45:30 2014" 4096 8 0 info.txt 第三行和第四行是我得到的输出。每当我使用stat命令时都会发生这种情况。同时,互联网上的每个人都会得到如下信息: File: `index.htm' Size: 17137 Blocks: 40 IO Block: 8192 regular …
15 osx  stat  portability 

2
哪一种是sed,awk,perl和sh中最便于移植的?
有人可以按可移植性顺序放置这些工具吗?即使在最小的* nix系统上,肯定可以找到其中的哪一个?是否肯定有100%存在?我的猜测是顺序如下: awk sed SH 佩尔 虽然我想象有些系统没有默认使用bourne shell,但是某些 shell将作为默认存在,会一直在/bin/sh吗?如果不是bourne型shell,大概不会。双方awk并sed有解释他们对POSIX规范的页面所以想必他们将始终存在。是这样吗?我可以确定两者都将安装在任何* nix上吗?包括嵌入式系统?

3
在默认安装中,在哪个unix发行版上安装了Python?
有谁知道概述将记录默认情况下哪个(最新)UNIX发行版Python可用的概述,即默认安装的一部分? PS:在问题移到此处之前,来自StackOverflow的答案: 并非所有Unix操作系统都知道,但是对于Linux,您可以随时访问distrowatch.org。但这不是发布此类问题的合适网站:请将其移至unix.stackexchange.com – vstrien 2小时前 我想不出默认没有安装任何发行版。如今,许多基本的系统工具都是用Python编写的。– Daniel Roseman 1小时前 默认情况下,它不在LFS中安装... – Oz123 1小时前

2
启动终端仿真器最方便的方法是什么?
假设我需要编写一个脚本来启动终端并执行命令,并且需要在各种系统上工作。我该如何以安全便携的方式进行操作? 是xterm始终安装?我假设任何带有GUI的* nix必须具有一些终端仿真器。我怎么去呢?Debian系统具有 x-terminal-emulator但显然甚至不能在Red Hat中运行,更不用说非Linux * nixes了。

2
除Bash和Zsh之外的其他外壳程序是否支持ANSI-C引用?例如$'string'
我有一个shell脚本,该脚本使用以下命令在其输出中打印一个绿色的选中标记: col_green="\e[32;01m" col_reset="\e[39;49;00m" echo -e "Done ${col_green}✓${col_reset}" 在阅读了有关Bash的ANSI-C引用之后,我意识到我可以在设置颜色变量并-e从echo中删除标志时使用它。 col_green=$'\e[32;01m' col_reset=$'\e[39;49;00m' echo "Done ${col_green}✓${col_reset}" 这似乎很吸引人,因为它意味着无论将消息传递给Bash的内置echo还是外部util /bin/echo(我在macOS上),消息都能正确打印。 但这是否会使脚本的可移植性降低?我知道Bash和Zsh支持这种引用风格,但是我不确定其他人。

7
如何安全获取ksh的版本?
如何从ksh脚本中安全地获取ksh的版本? 我已经看到以下解决方案: ksh --version echo ${.sh.version} echo $KSH_VERSION 在适当的情况下,所有这些方法都可以正常工作。但是,我关心的是不完美的情况。 具体来说,我使用的几台机器具有较旧的ksh版本,出于我的目的,这些版本严重缺乏功能。无论如何,我要(以编程方式)检查版本的原因是要查看ksh版本是否为功能较弱的版本之一。如果是这样,我想用不太出色的代码执行分支。 但是,在有问题的机器上,shell的能力不足导致无法检查版本... 如果我尝试ksh --version,它什么也不打印,并打开一个新实例ksh! 如果尝试echo ${.sh.version},ksh将其视为语法错误,不能使用丢弃2> /dev/null。 $ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution 当然echo $KSH_VERSION看起来可以正常工作-我的意思是它不会崩溃-尽管在这些机器上它是空白的。另外,我看到的地方是KSH_VERSION只被设定pdksh。 问题: 如何安全地以ksh编程方式检查版本?就我的目的而言,我并不在乎实际的版本号是多少,而只是它是否是的过时版本ksh。 是否$KSH_VERSION足够好?我的意思是,如果空白,那么ksh一定是过时的版本吗?该其他论坛是否正确,即使对于较新版本的,也可能未设置ksh? 根本没有办法检查吗?

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.