bashスクリプトのエイリアスを作成する


10

だから私は試してみて、を作成しaliasました.bashrc。ただし、コマンドをテストすると、次のようになります。

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

これが私が.bashrcファイルに持っているものです:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

面白いのは、エイリアスを作成したときvi、うまくいったことです。しかし、メニューにはありません。UnixStackExchangeで以前の投稿を調べ、他の投稿をフォローしようとしましたが、役に立ちませんでした。他に誰か提案がありますか?


1
エイリアスmenu = 'bash ./menuScript.sh'で試しましたか?(私はLinuxマシンにいないのでテストできません)
Con7e

どこから「メニュー」を実行していますか?「menuScript.sh」と同じディレクトリでない場合、「コマンドが見つかりません」というメッセージが表示されます。多分あなたは絶対パスを使うべきですか?
garethTheRed 14

1
@garethTheRedそれは言うだろう./menuScript.sh: command not found
マイケルMrozek

@MichaelMrozek-公正なもの。チェックしたところNo such file or directory、まだOPのエラーと同じではありませんでした。要点はまだ残っています-エイリアスが常にmenuScript.sh常駐するディレクトリからのみ使用されるのでない限り、絶対パスが最適です。
garethTheRed 14

1
@ryekayo完了:)
Con7e 14

回答:


9

で試してみてくださいalias menu='bash ./menuScript.sh'。私は現在Linuxマシンを使用していないため、自分でテストすることはできませんが、動作するはずです。エイリアスを呼び出すと、パスの処理方法がわからないためbash、最初にを含める必要があります。

また、端末をリセットすると、変更後に役立ちます。


最初の段落がどのように重要であるか理解できません。実行可能になっmenuScript.shていない限りchmod、エラーメッセージは「アクセスが拒否されました」でした。.bashrcファイルの再読み込みを強制することが答えだと思います。…………………PSシェルは、ユーザーが入力した場合と同じように./menuScript.sh、ファイルの実行を試みることにより、パスの処理方法を認識します。
スコット

7

あなたがするとき

alias menu='./menuScript.sh'

「そのファイル」と言うエイリアスを作成しますが、実際にそれをどうするかは言いません。

ただし、

alias menu='source ./menuScript.sh'

または

alias menu='. ./menuScript.sh'

そのファイルを実行すると言っいます。


6

変更を行った後、〜/ .bashrcファイルを入手することを覚えていますか?変更は、コンピューターを再起動した後、または単にファイルを調達した後に.bashrcファイルに反映されるためです。


2
このタイプの投稿は、コメントに適しているように見えます。
HalosGhost 14

2
@HalosGhostどのように考えますか?これも私が最初に思いつくことですが、それはまさにこれを引き起こします
マイケル・ムロゼック

@MichaelMrozek、私はこれをお勧めします。回答投稿が最終的な解決策を提供するように思えるからです.bashrc。一方、質問を明確にすること(たとえば、「忘れましたか?」など)はコメントに適しています。この投稿を回答により適したものにするために、言い換えるのにそれほど時間はかかりません。
HalosGhost 14

コンピューターを再起動するとうまくいきますが、ttyまたはセッション(ログインマネージャーを使用している場合)からログアウトするだけで済みます。グラフィカル環境にログインしていて、source ~/.bashrcまたはを使用したくない場合は. ~/.bashrc、別のシェルを開くこともできます。それはそれと同じくらい簡単です。再起動は必要ありません。
Dylan

0

それが動作した理由vimは、それが直接パスなしですでに呼び出し可能なプログラムであるためです。「これをプログラムとして実行してほしい」と明示的に言う必要はありませんvim。OSにハードコーディングされており、コマンドを受け取ったときに、実際のプログラムがどこにあっても、vimファイルを実行します/usr/bin/vi


ええと、いいえ、それはOSにハードコードされていません。でvim使用可能なファイル$PATHがあり、バイナリ実行可能ファイル、実行可能スクリプト、または別のプログラムへのシンボリックリンクでvimある可能性があります。そのエントリを削除すると、ユーザーは使用できなくなります。
roaima

@roaima私が意味したことは、vimの呼び出しはカスタムプログラムの呼び出しとは少し異なるということです。私はあなたが何を手に入れているのかを理解しています、そして同意します
Nathanael Morgan

私は、スクリプトが呼び出されifvi、私の中でその命を$HOME/bin(私の中にあることを起こるいます$PATH)。私は、システムにインストールされたバイナリを実行するのとまったく同じ方法で使用します。それがカスタムプログラムであることは本当に重要ではありません。
roaima

0

エイリアスには2つの問題があります

alias menu='./menuScript.sh'
  1. エイリアスを呼び出すときは、特定のディレクトリにいる必要があります。menuScript.sh存在しないディレクトリにいる場合、エイリアスは実行に失敗します。

    menuScript.shエイリアスを定義するときに、スクリプトへの完全な絶対パスを指定したほうがよいでしょう。たとえば、

    alias menu="$HOME/local/bin/menuScript.sh"

    または類似。

  2. 他の人がすでに言ったように、エイリアスが失敗するもう1つの理由は、スクリプトが実行可能でないか、無効な#!行があるためです。スクリプトが実行可能であることを確認してください

    chmod +x menuScript.sh

    スクリプトの最初の行は

    #!/bin/bash

    またはbash、システム上でのパス(またはスクリプトが記述されたシェル)のパス。

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