web-dev-qa-db-ja.com

shell-init:現在のディレクトリの取得中にエラーが発生しました:getcwd-通常の修正ではうまくいきません

私は簡単なスクリプトを持っています:

#!/bin/bash
for server in $(~/.ansible/ansible_hosts)
do
    ssh $server "hostname; readlink /opt/mydir/mylink;"
done

それは正常に動作します-プログラムは正しいホスト名とリンクを返します-ただし、サーバーのすべてではなく一部で次のエラーが発生することを除いて:

Shell-init:現在のディレクトリの取得エラー:getcwd:親ディレクトリにアクセスできません:そのようなファイルまたはディレクトリはありません

すべてのディレクトリが存在します。最も一般的な提案の1つは、cd、cd-、またはcd /を追加することです。そのステップが追加されたときに起こることはすべて追加です:

chdir:現在のディレクトリの取得エラー:getcwd:親ディレクトリにアクセスできません:そのようなファイルまたはディレクトリはありません

私は、homedirに混乱が生じた可能性があるオフチャンスでnfsデーモンをキックスタートしようとし、問題が/ optにあった場合には/etc/init.dを置き換えました。変わりはない

これは、単純なsshコマンドの代わりにansibleプレイブックを使用しようとすると、そのサーバーで失敗することを除いて、単に迷惑になります。

どんな洞察もありがたいです。

16
Todd Ellner

エラーはスクリプトにまったく関係ないと考えています。問題は、スクリプトを実行しようとしたときに存在するディレクトリがもう存在しないことです。たとえば、2つの端末、cd somedir/最初のものでmv somedir/ somewhere_else/ 2番目の端末で、最初の端末で何でも実行しようとすると、このエラーメッセージが表示されます。

少なくともこれは私の場合でした。

37
Putnik

これをスクリプトとして実行しています。$(〜/ .ansible/ansible_hosts)。 $()は、bashがそのスクリプトの実行を試み、結果を出力することを意味します。

しかし、それはスクリプトではありませんよね?ホストのリストです!

Word catを追加するだけで機能します。

#!/bin/bash
for server in $(cat ~/.ansible/ansible_hosts)
do
    ssh $server "hostname; readlink /opt/mydir/mylink;"
done
1
Jamieson Becker