問題:1つのkateプロセスで複数のファイルを編集します。
FILE_LIST はパスのリストを含む変数です。
FILE_LIST="$MAIN_PATH1 $MAIN_PATH2 ... $MAIN_PATH3"
/tmp
DST_DIRは、編集するファイルへのシンボリックリンクのターゲットフォルダです。for ループは検索要求を提供します。
print0/-0
一部のファイル名にスペースが含まれているため、検索要求は xargs を使用して関連付けられたファイルを作成します。for A_DIR in $LIST_PATH ; do find "$A_DIR" -type f ! -name "*.*~" ! -path "*000_ERRORS*" ! -path "*KEEP*" -print0 | xargs -0 -I@ bash -c " ln -s \"@\" \"$DST_DIR/${@##*/}\"" done
今まではすべて大丈夫です。すべてのシンボリックリンクは1つのフォルダにあります。
その後、他の人がすぐにケイトに餌をやるように求めた。
"$WORK_PATH"を探す -type l -print0 | xargs -0 -I{} xdg-su -c "Kate{} "
期待どおりに動作しません。ファイルには1つずつのみアクセスできます。それは目標ではありません。
ただし、別の端末で2番目の検索要求コマンドを手動で実行すると、次のようになります。
find /tmp/000_PGM_001 -type l -print0 | xargs -L 1 -0 -I{} bash -c "kate '{}'"
同じインスタンスからすべてのファイルをインポートできます。 kateインストールのすべてのファイルが一度取得されるまで、コマンドを手動で繰り返すことができます。
答え1
必要なようですね(GNUシステムを想定)
dirs=(
"$MAIN_PATH1"
"$MAIN_PATH2"
"$MAIN_PATH3"
)
LC_ALL=C find "${dirs[@]}" -name '*000_ERRORS*' -prune -o \
'*KEEP*' -prune -o ! -name '*~' -type f -exec ln -st "$DST_DIR" {} +
あなたのケイトについて:
find "$WORK_PATH" -type l -exec env LINK='{}' xdg-su -c 'kate "$LINK"' ';'
ここで、ファイルパスは環境変数として渡され、xdg-su
デスクトップ環境でスクリプトが実行されるコマンドはそれらを削除しないと想定されます。
xdg-su
とにかくスクリプトの内容を見ると、これを実行するには固定コマンドを渡すだけですkate "$LINK"
。任意のデータを渡すことは信頼できず、危険です。