タグ付けされた質問 「portability」

5
「which」を使用しないのはなぜですか?それでは何を使用しますか?
実行ファイルへのパスを探したり、Unixシェルでコマンド名を入力する場合に何が起こるか確認する場合は、異なるユーティリティの茄多があります(which、type、command、whence、where、whereis、whatis、hash、など)。 which避けるべきだとよく耳にします。どうして?代わりに何を使うべきですか?


9
どのシステムで// foo / barは/ foo / barと異なるのですか?
POSIX仕様の全体にわたって、規定(があります1、2、3の実装は、2から始まるパスを治療することを可能にする...)/特別。 POSIXアプリケーション(すべてのPOSIX準拠システムに移植できるようにPOSIX仕様に記述されたアプリケーション)//foo/barは、それが同じであると想定することはできません/foo/bar(ただし///foo/bar、同じであると想定できます/foo/bar)。 今、//foo特別に扱うそれらのPOSIXシステム(歴史的で、まだ維持されている)は何ですか?私はPOSIXの提供がMicrosoftによってUnixバリアント(XENIX)とWindows POSIXレイヤー(おそらく誰でも確認できますか?)のためにプッシュされたと信じました(今では間違っていることが証明されました)。 これは、Microsoft WindowsのPOSIXのようなレイヤーでもあるCygwinによって使用されます。Microsoft Windows以外のシステムはありますか?OpenVMS? //foo/bar特別なシステムでは、何に使用されますか?//host/pathネットワークファイルシステムにアクセスするには?仮想ファイルシステム? Unixライクで実行される一部のアプリケーションは(システムのAPI //foo/barではない場合)、パスを特別に処理しますか(そうでなければ/foo/bar、ファイルシステム上のパスとして処理するコンテキストで)。 編集、それから私は//foo/bar仕様の取り扱いの起源についてオースティングループのメーリングリストで質問しました、そして議論は興味深い読み物です(少なくとも考古学の観点から)。

18
シェルを使用してinitシステムを検出する
これは、オペレーティングシステムの検出に関連している可能性がありますが、特にシステムで現在使用されているinitシステムが必要です。 Fedora 15とUbuntuはsystemdを使用するようになり、UbuntuはUpstart(15.04までの長いデフォルト)を使用していましたが、他のものはSystem Vのバリエーションを使用しています。 クロスプラットフォームデーモンになるために書いているアプリケーションがあります。初期化スクリプトは、configureで渡すことができるパラメーターに基づいて動的に生成されています。 私がやりたいのは、彼らが使用している特定のinitシステム用のスクリプトを生成することです。これにより、インストールスクリプトをrootとしてパラメーターなしで合理的に実行でき、デーモンを自動的に「インストール」できます。 これは私が思いついたものです: / binでsystemd、upstartなどを検索します / proc / 1 / commをsystemd、upstartなどと比較します ユーザーに尋ねる これを行う最良のクロス/プラットフォーム方法は何でしょうか? 関連の種類、大部分の* nixにbashを依存させることはできますか、それともディストリビューション/ OSに依存しますか? 対象プラットフォーム: マックOS Linux(すべてのディストリビューション) BSD(すべてのバージョン) Solaris、Minix、およびその他の* nix

6
ポータブルシェルプログラミングのリソース
ポータブルシェルプログラミングにはどのようなリソースがありますか?最終的な答えは、対象となるすべてのプラットフォームでテストすることですが、それはほとんど実用的ではありません。 POSIX /シングルUNIXの仕様が開始され、それはあなたが何を各実装のサポートのレベルがあり、また一般的なものを拡張存在でもないように指示します。各実装のドキュメントを読むことができますが、それは非常に時間がかかり、完全に正確ではありません。 理想的なフォーマットは、POSIX仕様のある種のコミュニティ注釈付きバージョンであり、各機能は異なる実装間のサポートレベルによって注釈付けされているように思われます。そのようなことはありますか?または、他の有用なリソースがありますか? たとえば、Sven Mascheckのシェルポータビリティページがありますが、構文要素といくつかのビルトインについてのみであり、古いシェルのみをカバーしています。より包括的なリソースを探しています。

5
/ dev / stdin、/ dev / stdout、および/ dev / stderrの移植性はどのくらいですか?
時折、私は標準IOストリームの1つ(の「等価パス」を指定する必要がありstdin、stdout、stderr)。私は、Linuxで動作する時間の99%以来、私は先頭に追加/dev/取得する/dev/stdinなど、これが「思わ正しいことを行うために」。しかし、1つには、そのような理論的根拠について私はいつも不安でした(もちろん、うまくいかないまで「うまくいくようだから」)。さらに、私はこの操作がどれほどポータブルであるかについて良い感覚を持っていません。 そこで、いくつか質問があります。 Linuxののコンテキストでは、それが安全である(はい/いいえ)と同一視するstdin、 stdoutとstderrして/dev/stdin、/dev/stdoutと /dev/stderr? より一般的には、この同等性は「十分に移植可能」ですか? POSIXの参照が見つかりませんでした。

7
testまたは[または[[はbashシェル間および他のシェル間でより移植性がありますか?
できると思う $ [ -w /home/durrantm ] && echo "writable" writable または $ test -w /home/durrantm && echo "writable" writable または $ [[ -w /home/durrantm ]] && echo "writable" writable 3番目の構文を使用するのが好きです。それらはすべての点で、すべてのネガティブおよびエッジケースで同等ですか?移植性に違いはありますか?たとえば、UbuntuのbashとOS Xまたは古い/新しいbashバージョンの場合、たとえば4.0より前/後で、どちらも式を同じように展開しますか?

7
sed -i(インプレース編集)で移植性を実現するにはどうすればよいですか?
FreeBSDを実行している共有ホスティングであるサーバー用のシェルスクリプトを書いています。また、Linuxを実行しているPCでローカルにテストできるようにしたいと考えています。したがって、私はそれらを移植可能な方法で記述しようとしていますが、それsedを行う方法はありません。 私のウェブサイトの一部は生成された静的HTMLファイルを使用し、このsed行は各再生成の後に正しいDOCTYPEを挿入します: sed -i '1s/^/<!DOCTYPE html> \n/' ${file_name.html} sedLinux上のGNU で動作しますが、FreeBSD sedは-iオプションの後の最初の引数がバックアップコピーの拡張であると想定しています。これは次のようになります。 sed -i '' '1s/^/<!DOCTYPE html> \n/' ${file_name.html} しかし、GNUはsed順番に式が直後に続くことを期待します-i。(改行処理の修正も必要ですが、それはここですでに回答されています) もちろん、スクリプトのサーバーコピーにこの変更を含めることもできますが、バージョン管理にVCSを使用することは混乱します。完全に移植可能な方法でsedでこれを達成する方法はありますか?

7
スクリプトの絶対パスを取得するポータブルな方法?
(zsh)スクリプトが絶対パスを決定するための移植可能な方法は何ですか? Linuxでは、次のようなものを使用します mypath=$(readlink -f $0) ...しかし、これは移植性がありません。(たとえば、readlinkダーウィンでは-fフラグを認識せず、同等の機能もありませんreadlink。) よりポータブルな方法は何ですか?

3
Linuxを別のプラットフォーム要件に移植する[終了]
Linuxが利用可能であり、X86、ARM、PowerPCなどの多くの異なるプラットフォームに移植されていることを知っています。 しかし、移植に関しては、正確に何が必要ですか? 私の理解では、LinuxはCで書かれたソフトウェアであるということです。したがって、Linuxを元々X86からARMなどに移植する場合、特定のターゲットアーキテクチャ用のコンパイラでコードを再コンパイルするだけではありませんか? さまざまな周辺機器用のデバイスドライバーは別として、Linuxを新しいアーキテクチャに移植する際に他に必要なことは何ですか。コンパイラは私たちのためにすべてを処理しませんか?


2
リモートユーザーのログインシェルを知らずにssh経由で任意の単純なコマンドを実行するにはどうすればよいですか?
ssh を実行すると、迷惑な機能があります: ssh user@host cmd and "here's" "one arg" cmd引数をオンhostにしてそれを実行する代わりに、それとcmd引数をスペースで連結しhost、結果の文字列を解釈するためにシェルを実行します(呼び出したのsshではなく、呼び出した理由ですsexec)。 さらに悪いことに、その文字列を解釈するためにどのシェルが使用されるのかはわかりません。その文字列はログインシェルでuserあることが保証されていないtcshため、ログインシェルとして使用している人々がまだfish増えているためです。 それを回避する方法はありますか? 私は記憶された引数のリストのようなコマンドがあるとbash、アレイを、非ヌルのバイトの任意の配列を含むことができるそれぞれが、それが実行されたためにどのような方法があるhostようにuserかかわらず、そのログインシェルの一貫した方法でuserオンhost(これは主要なUnixシェルファミリの1つであると仮定します:Bourne、csh、rc / es、fish)? 私ができるはずのもう1つの合理的な仮定は、Bourne互換のshコマンドがhost利用できる$PATHということです。 例: cmd=( 'printf' '<%s>\n' 'arg with $and spaces' '' # empty $'even\n* * *\nnewlines' "and 'single quotes'" '!!' ) ksh/ zsh/ bash/ でローカルに実行できますyash: $ "${cmd[@]}" <arg with $and spaces> <> <even * * * …

4
sudoはどのくらい普遍的ですか?
私は何かをインストールする方法についていくつかの指示を書いていました(TeX関連-あなたが尋ねないなら、私は詳細を提供することであなたの一日を台無しにしません)sudo。誰かが、それがsudoすべてのLinux(またはUnix)ディストリビューションで利用可能であるとは思わなかったとコメントしました。 を持っていないUnixディストリビューションはありsudoますか?すべてのシステムに共通して認められている「スーパーユーザー権限を取得」コマンドがありますか?

5
bashスクリプトの代わりにzshを使用することをお勧めしますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5日前に閉鎖されました。 zshスクリプトを実行するのに十分な人がインストールされていると仮定できますか? #!/usr/bin/env zsh シバンとして? または、これにより、スクリプトが非常に多くのシステムで実行できなくなりますか? 明確化:エンドユーザーが実行したいプログラム/スクリプトに興味があります(Ubuntu、Debian、SUSE、Arch&cなど)。

8
Linuxで最も普遍的なスクリプト言語は?
この質問は、UnixおよびLinux Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 私たちはLinuxシステム用のスクリプトを書いていますが、Linuxで現在最も一般的に使用されるスクリプト言語は何かという議論があります。Bash、SH、Posix?何?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.