GNUユーティリティのみを使用してOS Xで別々のbash環境を設定するにはどうすればよいですか?

GNUユーティリティのみを使用してOS Xで別々のbash環境を設定するにはどうすればよいですか?

過去5年間、私は科学コンピューティングを実行するための日常的なオペレーティングシステムとしてLinuxを使用してきました。私の仕事は最近Macを提供しており、今後数ヶ月間デフォルトユーザーになります。 MacのFree-BSD bash環境とおなじみのGNU環境の間でクラッシュが発生し続けます。どちらの環境も、私が設定したbashスクリプトとbashコマンド(coreutilsfindutilsなど)を実行しようとしたときに発生します。 HPCだけでなく、他のすべてのコンピュータがLinuxとGNUユーティリティを使用しているため、Free-BSDユーティリティに完全に切り替えたくありません。私は2つのbashスクリプトセットを維持し、2つのシステム間の異なるフラグと機能の微妙な違いを覚えておく必要がありません。また、他のユーザーが使用するMac GUIユーティリティなどを破損したくありません(今後数ヶ月以内に、または他のユーザーに提供するとき)。さらに、次のことに答えてください。これ関連する問題は、Mac Free-BSDユーティリティをGNUユーティリティに完全に置き換えないように警告します。

システムFree-BSDユーティリティを維持しながら、GNUユーティリティのみを使用するように別々のbash環境をインストール/設定できますか? 私が期待する最も有望なオプションは、$PATHFree-BSD実行可能ファイルを無視しながら、GNU実行可能ファイル(および対応する完全修飾名)を含むディレクトリを指すように変数を設定することです。これをクロスプラットフォームのbashスクリプトにどのように適用できますか?検討する他のオプションはありますか?

答え1

まず、これだけcoreutils。 BSDに対応牛に似た一種の栄養findutils道路とても違う、ほぼすべてのコマンドは、次に関連付けられています。動的接続などが異なります。

さらに、バージョンの違いも処理する必要があります。 OSこれ自動ツールまた、主要なLinuxディストリビューションに比べて古いことが多い。

質問の重要な部分に対する答えは次のとおりです。 「もちろん、使える理由は何ですか?」自分で作ったこれらの代替GNUツールをすべてインストールするには、ファイルに最初のツールを置いて、その$(brew --prefix coreutils)/libexec/gnubinツールが最初に見つかったことを確認してください。/usr/local/binPATH

export PATH="$(brew --prefix coreutils)/libexec/gnubin:/usr/local/bin:$PATH"

何らかの理由でパッケージが別の場所にインストールされている場合は、その内容も変数 brewに含めてください。PATH

いくつかのパッケージのみを交換したい場合は、トリッキーな部分はすべての名前変更を処理することです。brewGNUをインストールするときなど、コアオペレーティングシステムにすでに実装されているプログラムをインストールするたびにそのバージョンの名前が異なるようにcoreutils指定されているため、必要に応じてそのプログラムのいずれかを実行できます。これらすべてのシンボリックリンクの名前を変更するのではなく、1これらすべての問題を解決するために間接層を使用することをお勧めします。

$ mkdir ~/linux
$ cd ~/linux
$ ln -s /usr/local/bin/gmv mv
...etc for all the other tools you want to rename to cover OS versions
$ export PATH=$HOME/linux:$PATH
...try it out...

新しい環境に慣れたら、export PATH=$HOME/linux:$PATHを移動できます~/.bash_profile

これは、バッチ交換でもシングルアプリケーション交換でも、対話型の使用を処理します。

残念ながら、シェルスクリプトの問題は完全には解決されません。たとえば、シェルスクリプトが独自の環境を取得する場合がありますcron。この場合、PATH各クロスプラットフォームシェルスクリプトの上部を変更できます。

#!/bin/bash
export PATH="$HOME/linux:$(brew --prefix coreutils)/libexec/gnubin:/usr/local/bin:$PATH"

これを条件に設定する必要はありません。ただシェルにプログラムを見つけるための別の場所を提供するからです。


脚注

  1. 例えば/usr/local/bin/gmv../Cellar/coreutils/$version/bin/gmv

関連記事

  1. Mac OS XユーティリティをGNUコアユーティリティに置き換えるには?
  2. Mac OS XでGNUコマンドラインツールをインストールして使用する

答え2

VMボックスやデュアルブートを使用せずにfreebsdを使用してデフォルトでGNUを実行できない場合は、この回答を試す方法としてここに入れます。

前述のように、homebrewはすべてのGNU coreutilをインストールすることはできません。私が間違っている場合は訂正してください。しかし、すべてのファイルを1つの場所(1つのコンピュータ)に保存することもできます。

インターネットに接続されているセカンダリコンピュータ(Raspberry Piなど)がある場合は、MacのLinuxボックスにSSHで接続できます。または、X環境を使用する場合は、コンピュータのLinuxコンピュータでx11vncを使用できます。りんご。

SSHを使用している場合は、ログインシェルにのみアクセスできることに注意してください。

SSHサーバーとクライアントの作成方法

まず、opensshサーバーがLinuxシステムで実行されていることを確認してください。

$ service ssh status

サービスが実行されると、次の出力が表示されます。

    ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2015-07-17 16:51:08 NPT; 5h 21min ago
  Process: 1669 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
 Main PID: 615 (sshd)
   CGroup: /system.slice/ssh.service
           └─615 /usr/sbin/sshd -D

サービスが実行されていない場合は、まずopensshがインストールされていることを確認してください。

sudo apt-get install openssh

その後サービス開始

sudo service ssh start

すべてが完了しました! (もちろんキーを生成したくない場合)

SSH経由でLinuxシステムにログインできるようになりました。

ssh <USERNAME_ON_LINUX_MECHINE>@<LINUX_HOST_NAME>

Linux ホスト名は、デフォルトでシステムの外部 IP アドレスです。

(もちろん、Macにもopensshをインストールする必要があります)

SSHトンネリングの完全なチュートリアルは次のとおりです。

http://inside.mines.edu/fs_home/gmurray/HowTo/sshNotes.html

x11vncサーバーとクライアントの使用方法

私はvncがSSHのより良い形だと思います。 (私の個人的な意見) VNCはSSHよりもインストールしやすい

以下はvncを設定するためのArch-wikiリンクです。 https://wiki.archlinux.org/index.php/X11vnc

  • x11vncのインストール

    sudo apt-get install x11vnc

  • ユーザーのパスワードを作成します。

    x11vnc -storepasswd

  • SSH設定がある場合は、ログインしている場合はx11vncを起動できますが、パスワードファイルを使用するように指示する必要があります。

    x11vnc -usepw

lightdmを使用してログインしていると仮定すると、次のようにx11vncを起動してこの問題を解決できます。

sudo x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw

関連情報