以下はなぜ機能しないのでしょうか?
$ 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 で問題が発生します)
ベストアンサー1
シェルはエイリアスを子プロセスに渡さないためです ($() または `` を使用する場合を除く)。
$ alias sayHello='/bin/echo "Hello world!"'
これで、このシェル プロセスでエイリアスが認識されます。これは問題ありませんが、この 1 つのシェル プロセスでのみ機能します。
$ sayHello
Hello world!
同じシェルで「sayHello」と言ったので、うまくいきました。
$ nohup sayHello
ここで、プログラム「nohup」は子プロセスとして起動されます。したがって、エイリアスは受信されません。次に、見つからない子プロセス「sayHello」を起動します。
特定の問題の場合、新しい「perl」と「python」をできる限り通常のものに似せるのが最善です。検索パスを設定することをお勧めします。
~/.bash_profile
あなたの追加で
export PATH="/my/shiny/interpreters/bin:${PATH}"
その後再度ログインしてください。
これは環境変数なので、意思シェルかどうかに関係なく、すべての子プロセスに渡されるようになりました。これで、非常に頻繁に動作するはずです。