質問
なぜ次の機能が機能しないのですか?
$ alias sayHello='/bin/echo "Hello world!"'
$ sayHello
Hello world!
$ nohup sayHello
nohup: appending output to `nohup.out'
nohup: cannot run command `sayHello': No such file or directory
(私がこの質問をする理由は、私が私をエイリアスしたからです perl
と python
私自身の目的のために最適化されたさまざまなPerl/Pythonバイナリに。ただし、Perl/Pythonバイナリへのフルパスを提供しない場合、Nohupはトラブルを与えてくれます)
解決
シェルはエイリアスを子プロセスに渡さないため($()または ``を使用する場合を除く)。
$ alias sayhello = '/bin/echo "hello world!"'
現在、エイリアスはこのシェルプロセスで知られていますが、これは問題ありませんが、この1つのシェルプロセスでのみ機能します。
$ sayHello
Hello world!
あなたは同じシェルで「sayhello」と言っていたので、それは機能しました。
$ nohup sayHello
ここでは、プログラム「nohup」が子プロセスとして開始されています。したがって、エイリアスは受け取りません。次に、子どものプロセス「Sayhello」を開始します。これは見つかりません。
特定の問題については、新しい「Perl」と「Python」をできるだけ通常のもののように見せることが最善です。検索パスを設定することをお勧めします。
〜/.bash_profile add:export path = "/my/shiny/clentioners/bin:$ {path}"
その後、relogin。
これは環境変数であるため、それです 意思 シェルであろうとなかろうと、すべての子プロセスに渡されます - 今では非常に頻繁に機能するはずです。
他のヒント
Bashのために:Nohupをやってみてください」your_alias
'。わたしにはできる。なぜバックの引用が表示されないのかわかりません。あなたのエイリアスを背面の引用符に入れます。
bashを使用すると、 -i
オプション。これはあなたのものを調達します .bashrc
有効にするだけでなく expand_aliases
シェルオプション。確かに、これはあなたの場合にのみ機能します エイリアス あなたに定義されています .bashrc
これが大会です。
バッシュマンページ:
場合
-i
オプションが存在します、シェルはです 相互の作用.Expand_aliase: :セットの場合、エイリアスはエイリアスの下で上記のように拡張されます。このオプションはです デフォルトで有効になっています インタラクティブなシェル用。
ログインシェルではないインタラクティブなシェルが開始されると、bashはコマンドを読み取り、実行します
/etc/bash.bashrc
と~/.bashrc
, 、これらのファイルが存在する場合。
$ nohup bash -ci 'sayHello'
あなたが見たら エイリアス Bashマニュアルのセクションによると
各単純なコマンドの最初の単語は、引用されていない場合、エイリアスがあるかどうかを確認します。
残念ながら、そうではないようです bash
似たようなものがあります zsh
's グローバルエイリアス, 、任意の位置で拡張されます。