web-dev-qa-db-ja.com

すべてのユーザーのエイリアス

私はこのファイルを作成しました:/etc/profile.d/pycharm_alias.sh

startPyCharm() {...

}

alias py=startPyCharm

PCを再起動しましたが、エイリアスを使用できません。

===> alias
...empty

Ssh経由でPCにログインすると、エイリアスが使用可能になります。

===> ssh root@localhost
..
root@pc:~# alias
alias py='startPyCharm'

エイリアスをubu​​ntu linuxシステムのすべてのユーザーが利用できるようにする方法は?

Bashシェルを使用します。

6
guettli

なぜすべてのユーザーにエイリアスが必要なのですか?

実行可能スクリプトを作成しないのはなぜですか?

スクリプトはより単純で、bashだけでなく、すべてのシェルから使用できます。

少なくとも私の場合、エイリアスの代わりにスクリプトを使用すると問題が解決しました。

ところで:これは単なる回避策であり、質問に対する実際の解決策ではありません。

0
guettli

これを_/etc/bash.bashrc_に入れてみてください。目的は# System-wide .bashrc file for interactive bash(1) shells.であると明記されています。あなたのprofile.dソリューションが機能しなかったことに驚いています。

2
stratus

エイリアスは個人的なツールです

  • エイリアスは個人的な使用を目的としていると思います(各ユーザーの~/.bashrcファイルに常駐する必要があります)。

シェルスクリプト(および他のプログラム)は一般的なツールです

  • シェルスクリプトを作成して、「みんなのパス」にあるディレクトリに配置します。

    • ただし、既存のプログラムを上書きしたり、既存のプログラムを影にしたりしないように注意することが重要です。システムがPATHを介してそれを見つけられないように、パスの既存のプログラムの前にシェルスクリプトを置くことができます。

      つまり、他のプログラムの問題を回避するために、名前が一意であることを確認してくださいです。

詳細なヒント

これは、Lubuntu 18.04.x LTSでの私のパスです。

$ echo $PATH
/home/sudodus/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/games

私は自分のbinディレクトリを持っています。このディレクトリは自動的に検出され、パスの先頭に置かれます(最高の優先度)。しかし、パスの残りの部分は標準です。

あなたに

  • 名前と競合していないことを確認してください

    type unique-name  # shows if it exists and what kind of program it is
    which unique-name # shows where an installed program is stored 
    unique-name       # if known but not installed, you get a hint about it
    apt-cache policy *unique-name*  # package name (may or may not be same as program name)
    
  • 競合がない場合は、シェルスクリプトを作成します(これは簡単な例です)

    echo 'echo "Hello World"' > unique-name
    
  • シェルスクリプトを実行可能にします

    chmod +x unique-name
    
  • root権限が必要な場合は/usr/local/sbinに、それ以外の場合は/usr/local/binにシェルスクリプトを挿入します。

    Sudo cp -i unique-name /usr/local/bin
    

    オプション-iは、名前がターゲットディレクトリにすでに存在する場合にプロンプ​​トを表示します。

すべてのユーザーがシェルスクリプトを実行する方法

シェルスクリプトを実行可能にして、それが全員のPATHのディレクトリにある場合、誰でもそのファイル名を使用して実行できます。

unique-name

標準プログラムの名前としてまだ使用されていないいくつかの短い文字列があり、そのような名前は、

type short-string-to-be-tested

例えば

$ type py
bash: type: py: not found

私のコンピューターには実行可能プログラムがなく、その名前の組み込みシェルもないので、pyをファイル名として使用できます(エイリアスは必要ありません)。

しかし、シェルスクリプトの名前をその名前に変更する前にpyを実行しようとすると、

$ py

Command 'py' not found, but can be installed with:

Sudo apt install pythonpy

そのようなプログラムがあることがわかります(ただし、まだインストールされていません)。たとえば、別の名前を選択することをお勧めします。

pych

これは、元の名前PyCharmから派生した短い名前にすることができます。

1
sudodus

グローバルaliasが機能しない理由

グローバルaliasが機能しない理由の1つは次のとおりです here

この回答の方法は使用しないでください。 _.sh_(または_/etc/profile.d/_)の_/etc/profile_ファイルのエイリアスは、ログインシェルに対してのみ定義され、対話型の非ログインシェルでは機能しません。環境変数とは異なり、bashはエイリアスを子プロセスにエクスポートできません。子bashシェルもエクスポートできません。この方法は、仮想コンソールまたはSSHを介してログオンすることによって取得された元のシェルなどのログインシェルでのみテストされている場合、正常に機能するように見えるかもしれませんが、 子シェルで失敗する で失敗しますGUIターミナルウィンドウによって起動されるシェル。 – Eliah Kagan 2015年4月18日0:56


_/etc/profile.d_でグローバル関数を使用する

現在、_/etc/profile.d/pycharm_alias.sh_が含まれています:

_startPyCharm() {...

}

alias py=startPyCharm
_

関数にグローバルエイリアスを割り当てる必要はありません。 pyが行うことを実行するStartPyCharmというグローバル関数を作成するだけです。

たとえば、以下を含む_/etc/profile.d/py.sh_を作成します。

_#!/bin/bash

py () {
    echo "Running py function in /etc/profile.d/py.sh"
    echo "Substitute for py alias which calls StartPyCharm function"
}

export -f py
_

echoコマンドを現在のStartPyCharm ()関数の内容に置き換えます。

ユーザーがログインしてシェルを開くと、pyと入力でき、関数のグローバルエイリアスの代わりにグローバル関数が呼び出されます。

すべての関数(グローバルとローカルの両方)を表示するには、_declare -F_を使用します

1